Как обрабатывать двойные кавычки в значении JSON?

#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. Это имеет смысл. К сожалению, я не могу избежать «двойных кавычек с пробелами», потому что некоторые ответы пользователя могут содержать двойные кавычки в конце сообщения. Я попытаюсь поговорить с разработчиком, если есть какой-либо шанс отправить ответ с экранированными кавычками. Спасибо