#python #json #double-quotes
#python #json #двойные кавычки
Вопрос:
У меня есть строка, которую я получаю в качестве HTTP-ответа. К сожалению, строка находится в формате raw, и я не могу преобразовать ее в объект JSON.
Пример строки:
json_string = '{"client_id":8888,"time":null,"questions":{"id":10000,"answered":"true","answer":"The "project" was good, I enjoyed it. Do you plan to repeat it?"},"other":"When is the "project" released?"}'
Проблема со строкой заключается в том, что она содержит двойные кавычки в некоторых значениях (ответы пользователя). Ключи значений, которые могут содержать двойные кавычки, не всегда совпадают (здесь «ответ» и «другое» могут отличаться в других ответах). Ответ пользователя может содержать любые символы (запятые, скобки, двойные кавычки, …).
Я пытался использовать разные загрузчики (json, yaml) и даже пытался самостоятельно проанализировать строку с помощью регулярного выражения, но у меня всегда ничего не получалось.
Есть ли какой-либо способ преобразовать эту строку в объект JSON?
Комментарии:
1. Что создает эту строку? С точки зрения JSON это не работает.
2. Вы упоминаете, что строка, которую вы получаете, взята из HTTP-ответа. Однако он не в допустимом формате JSON. Предназначен ли сервер, с которым вы общаетесь, для его анализа как json?
3. Строка создается внешним приложением (разработчиком), поэтому я не знаю, как создается строка. Однако, согласно документации, ответ должен быть JSON.
Ответ №1:
Чтобы было ясно, правильным решением здесь было бы исправить все, что отправляет этот HTTP-ответ; правильный способ включить двойные кавычки в строку JSON — это обратная косая черта:
{ "key": "value with "double quotes" inside" }
Любой анализатор JSON должен принимать вышеуказанное как допустимый объект.
Вы не можете надежно анализировать что-либо с неэкранированными кавычками, потому что вы не можете определить, какие из них являются фактическими разделителями строк, а какие — вложенными данными. Если вы можете предположить, что кавычки сбалансированы (поэтому внутри любой строки всегда есть четное количество кавычек), то вы можете создать синтаксический анализатор, чтобы преобразовать его в правильный синтаксис, но это не будет простым исправлением на основе регулярных выражений.
Тем не менее, с вашими примерами данных похоже, что встроенные кавычки окружены пробелами, а фактические кавычки-разделители — нет. Итак, вы могли бы попробовать запустить его через замену "
(пробел-кавычка) на "
(пробел-обратная косая черта-кавычка) и "
( "
пробел в кавычках) на (обратная косая черта-кавычка-пробел) и посмотреть, работает ли это.
Комментарии:
1. Это имеет смысл. К сожалению, я не могу избежать «двойных кавычек с пробелами», потому что некоторые ответы пользователя могут содержать двойные кавычки в конце сообщения. Я попытаюсь поговорить с разработчиком, если есть какой-либо шанс отправить ответ с экранированными кавычками. Спасибо