Как получить JSON из ChatGPT для программирования

В этой статье

Чтобы перенести заметки в JSON через обычный ChatGPT, сначала задайте поля, их типы и правила для пропущенных значений. Затем попросите преобразовать текст. У программы нет возможности догадаться, означает ли «цена не указана» ноль, пустую строку или отсутствие значения. Этот выбор нужно сделать до генерации.

Разберём две товарные записи: зададим структуру, получим образец JSON и отдельно проверим синтаксис и содержание.

Сначала задайте структуру, а не просто формат

JSON — текстовый формат структурированных данных. Объект записывается в фигурных скобках, массив — в квадратных. Значениями могут быть строки, числа, логические значения true и false, null, а также вложенные объекты и массивы. Имена полей заключаются в двойные кавычки; между элементами стоят запятые, а завершающая запятая недопустима. Правила формата описаны в RFC 8259.

В запросе укажите:

  • форму корня — здесь объект с единственным ключом items, содержащим массив;
  • точный набор полей каждой записи;
  • тип каждого поля и допустимые значения;
  • правило для неизвестных данных;
  • запрет на добавление записей и полей.

Для наших заметок id и name будут строками, quantity — неотрицательным целым числом, price — числом или null, in_stock — логическим значением. Цена «не указана» должна стать null: ноль означал бы известную нулевую цену.

Готовый запрос для двух заметок

Вставьте в обычный чат этот запрос вместе с исходником:

Преобразуй приведённые две записи в JSON по указанной структуре.
Верни только JSON, без Markdown, комментариев и пояснений.
Сохрани id и названия, используй точку в числах; отсутствие цены обозначь null.
Не добавляй записи и поля.
После моего следующего сообщения отдельно проверь структуру и значения по исходнику.

Структура:
- корень — объект с единственным ключом items, значение — массив;
- в каждой записи ровно поля id (строка), name (строка), quantity (неотрицательное целое), price (число или null), in_stock (логическое значение).

Исходник:
B01 — Блокнот «Север», количество 3, цена 120,50 руб., в наличии.
B02 — Папка, количество 0, цена не указана, нет в наличии.

Образец результата по этим данным:

{
  "items": [
    {
      "id": "B01",
      "name": "Блокнот «Север»",
      "quantity": 3,
      "price": 120.5,
      "in_stock": true
    },
    {
      "id": "B02",
      "name": "Папка",
      "quantity": 0,
      "price": null,
      "in_stock": false
    }
  ]
}

Число 120.5 сохраняет значение цены 120,50: десятичный разделитель в JSON — точка, а конечный ноль здесь не нужен. У второй записи количество известно и равно 0, цена неизвестна и записана как null. Это разные состояния данных.

Такой текстовый запрос можно выполнить в бесплатном ChatGPT с учётом ограничений использования. Если вы уже выбираете платный доступ, в Amber Market можно посмотреть месячную подписку ChatGPT. Для преобразования этих заметок и локальной проверки JSON покупка не требуется.

Проверьте синтаксис отдельно от содержания

Сохраните JSON из ответа без обратных кавычек в файл input.json в кодировке UTF-8. На компьютере с установленным Python выполните:

python -m json.tool input.json

Команда разбирает документ и печатает его в отформатированном виде. Лишняя запятая, комментарий или одинарные кавычки вместо двойных приведут к ошибке разбора. Этот интерфейс описан в документации модуля json для Python.

Успешный разбор означает, что файл принят парсером Python. Это ещё не полная проверка соответствия JSON: стандартный парсер допускает NaN, хотя такого значения в формате нет. Повторяющиеся ключи тоже могут пройти разбор. Кроме того, команда не проверяет вашу структуру и исходные заметки: отрицательное количество или выдуманная цена могут быть синтаксически корректны.

Для двух записей достаточно короткой ручной сверки:

  1. У корня один ключ — items, его значение — массив из двух объектов с идентификаторами B01 и B02.
  2. У каждой записи ровно пять ключей: id, name, quantity, price, in_stock. Ни один ключ не повторяется.
  3. id и name — строки в двойных кавычках; quantity — целое число не меньше нуля; price — число или null; in_stocktrue или false. Значения "3", "null" и "false" — строки и этим типам не соответствуют.
  4. В B01 сохранены название Блокнот «Север», количество 3, цена 120.5 и наличие true.
  5. В B02 сохранены название Папка, количество 0, цена null и наличие false.

Если ChatGPT подставил 0 вместо null, JSON может успешно пройти json.tool, но смысл изменится: программа получит нулевую цену вместо неизвестной. Исправление можно сформулировать так:

Сверь структуру и значения с исходными заметками. В записи B02 цена не указана:
price должен быть null, а не 0. Исправь и верни весь объект с items,
без Markdown, пояснений и добавления полей.

Исправленный ответ снова проверьте парсером и сверьте с исходником. Для других заметок заранее уточните условия запроса: например, чем обозначать неизвестную дату и допустимо ли пропустить поле. Тогда у модели будет конкретное правило преобразования.

Передайте проверенные данные в код

В Python вызов json.loads() преобразует текст JSON в структуры языка: объект станет dict, массив — list, а nullNone. Дальше можно написать с ChatGPT скрипт на Python для обработки записей. Если такой импорт будет регулярным, перенесите проверку полей, типов и допустимых значений в код: ручная сверка удобна для двух товаров, но плохо масштабируется на тысячи.

Источники

Есть следующая задача?Ещё по теме «Программирование» →