Функция загрузки Json не может быть преобразована в словарь, если вложенные 3 уровня или глубже - PullRequest
0 голосов
/ 10 января 2019

Я принимаю значение json, отправленное в запросе тела к приложению Python / Django, например:

127.0.0.1:8000/devices/1/?json={ "DeviceId":"1-9024-9929", "Date":"1/4/2019 9:52:2", "Location":"-1.000000000,-1.000000000", "Key":"{XXXXX-XXXX-XXXX-XXXX-XXXXX}", "Data":"{\"Value0\":\"{ \"ReferenceValue\":\"Elevation\", \"Prediction\":18.297534944, \"ModelPredictionFit\":3.196141712e-2, \"PCBasedEstimatedError\":3.196141712e-2, \"PCScore\":4.855016704, \"PredictionValueScore\":4.687027008e-2}\",}"}

При получении на стороне сервера я использую json.loads для преобразования в

{'DeviceId': '1-9024-9929', 'Date': '1/4/2019 9:52:2', 'Location': '-1.000000000,-1.000000000', 'Key': '{XXXXX-XXXX-XXXX-XXXX-XXXXX}', 'Data': '{"Value0":"{ "ReferenceValue":"Elevation", "Prediction":18.297534944, "ModelPredictionFit":3.196141712e-2, "PCBasedEstimatedError":3.196141712e-2, "PCScore":4.855016704, "PredictionValueScore":4.687027008e-2}",}'}

Хотя я могу получить доступ к любым значениям с помощью соответствующей клавиши, например

receivedJson["DeviceId"]

> 1-9024-9929

ключ «Данные» нельзя использовать для доступа к дочерним элементам, так как он неправильно отформатирован:

recievedJson["Data"]

> {"Value0":"{ "ReferenceValue":"Elevation", "Prediction":18.297534944, "ModelPredictionFit":3.196141712e-2, "PCBasedEstimatedError":3.196141712e-2, "PCScore":4.855016704, "PredictionValueScore":4.687027008e-2}",}

Каков наиболее эффективный способ преобразования этого вложенного массива обратно в пригодный для использования формат json / Dictionary (ключи, требующие одинарных кавычек)?

1 Ответ

0 голосов
/ 10 января 2019

receivedJson['Data'] возможно сбрасывается дважды по ошибке. Вы всегда можете проверить тип значения перед его разбором. Чтобы проверить, является ли значение дампом JSON, вы можете сначала использовать функцию, подобную этой.

def is_json(json_):
   try:
      json.loads(json_)
      return True
   except Exception as e:
      return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...