如何使用PYTHON获取字典类型而非字符串类型的JSON.loads()输出

如何使用PYTHON获取字典类型而非字符串类型的JSON.loads()输出,json,python-3.x,python-requests,python-responses,Json,Python 3.x,Python Requests,Python Responses,当我使用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.

当我使用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}'
我的问题是,当我使用loads格式时,输出必须是字典类型,但我不知道为什么要将字符串类型作为我的输出。如何将此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
错误:回溯(最近一次呼叫最后一次):
文件“Db.py”,第84行,在
打印(par['GunningFogScore'])
TypeError:字符串索引必须是整数

我可以通过以下方法重现您的问题:

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

所以当你重新加载

par = json.loads(s)
您得到的是一个字符串,而不是一个字典,它解释了使用
[]
时的错误消息(因为您试图向字符串传递密钥)

解决方法:

使用
json.loads(json.loads))
恢复数据


作为更好的修复方法,只需在序列化过程中使用一次
dumps

您正在转储一个
json
字符串,而不是python dict(您正在转储一个转储…)。不要使用
json
转储字符串,只需编写它。@Jean-François Fabre它也帮了我的忙谢谢:)@Jean-François Fabre“不要使用json转储字符串,只需编写它”是什么意思?我遇到了同样的错误,但没有得到您的评论:(@soommy12既然你能找出这个问题,而你也有同样的问题,那么我就回答了。告诉我你是否理解得更好。我理解你所说的,但在我的代码中我只使用了一次
dumps
。无论如何,我认为如果我有格式类似json的字符串,我应该使用
load轻松地将其转换为objs
method您正在对已经是字符串的内容使用转储。如果它已经是字符串,请直接将其写入文件,不要使用
json
那么我可以像普通字典一样对其进行迭代吗?现在似乎是另一个问题。也许您可以发布自己的问题。我不确定这个答案是否回答了您的问题。