Код Middle Промптинг и структурированный вывод спрашивают часто обновлено

Достать JSON из ответа модели

Условие

Модель иногда оборачивает JSON в текст или блок ```json. Напишите extract_json(text, required):

  • найдите первый символ { и попробуйте разобрать JSON-объект, начинающийся с него (используйте json.JSONDecoder().raw_decode); если не вышло, пробуйте со следующего {;
  • первый успешно разобранный объект проверьте: все ключи из списка required должны присутствовать;
  • верните словарь {"ok": True, "data": obj} или {"ok": False, "error": "no_json"} (объект не найден) / {"ok": False, "error": "missing:<ключ>"} (первый отсутствующий ключ в порядке required).

Примеры

extract_json("{\"a\": 1}", ["a"]) // {"ok":true,"data":{"a":1}}
extract_json("Вот ответ:\n```json\n{\"label\": \"spam\", \"score\": 0.9}\n```", ["label", "score"]) // {"ok":true,"data":{"label":"spam","score":0.9}}
extract_json("Нет данных", ["a"]) // {"ok":false,"error":"no_json"}

Как подойти

Подсказки: 1
  1. json.JSONDecoder().raw_decode(text, i) возвращает объект и позицию конца.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.