Как получить вывод JSON.loads() в словарном типе, но не в строковом типе, используя PYTHON

Когда я использую JSON.dump(), я получаю формат ниже JSON

Dumps data"b'{\"AutomaticReadabilityIndex\":2.7999999999999994,\"AgeLevel\":[\" 11 to 12\"],\"Statement\":[\"Nice. Your grade is about six\"],\"SpacheScore\":1.877,\"GunningFogScore\":9.099999999999998,\"SmogIndex\":5.999999999999999}'"

Когда я использую JSON.loads(), я получаю формат ниже JSON с байтами

loads data b'{"AutomaticReadabilityIndex":2.7999999999999994,"AgeLevel":[" 11 to 12"],"Statement":["Nice. Your grade is about six"],"SpacheScore":1.877,"GunningFogScore":9.099999999999998,"SmogIndex":5.999999999999999}'

Мой вопрос, когда я использую формат загрузки, вывод должен быть в словаре, но я не знаю, почему я получаю строковый тип в качестве выходных данных. Как преобразовать эту строку JSON в тип словаря.

Loads Data Type : type of loads <class 'str'>

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

ERROR : Traceback (most recent call last):
File "Db.py", line 84, in <module>
print(par['GunningFogScore'])
TypeError: string indices must be integers

1 ответ

Я могу воспроизвести вашу проблему просто с помощью:

import json

s = {"AutomaticReadabilityIndex":2.7999999999999994,"AgeLevel":[" 11 to 12"],"Statement":["Nice. Your grade is about six"],"SpacheScore":1.877,"GunningFogScore":9.099999999999998,"SmogIndex":5.999999999999999}

print(json.dumps(json.dumps(s)))

результат:

"{\"SmogIndex\": 5.999999999999999, \"AutomaticReadabilityIndex\": 2.7999999999999994, \"SpacheScore\": 1.877, \"GunningFogScore\": 9.099999999999998, \"AgeLevel\": [\" 11 to 12\"], \"Statement\": [\"Nice. Your grade is about six\"]}"

Так что либо:

  • вы цепляете две свалки. Первый дамп преобразует словарь в строку, но дамп строки также допустим, поэтому строка сбрасывается, кавычки, экранируются и т. Д...
  • вы сбрасываете строку, которая выглядит как словарь ("{12:1,14:2}").

(Если вы не уверены в типе, проверьте type(s) перед выполнением дампа)

Поэтому, когда вы перезагрузите с

par = json.loads(s)

вы получаете строку, а не словарь, который объясняет сообщение об ошибке при использовании [] (поскольку вы пытаетесь передать ключ в строку)

Временное решение:

использование json.loads(json.loads(s)) восстановить ваши данные.

и, как лучше исправить, просто используйте dumps один раз в процессе сериализации.

Другие вопросы по тегам