4

当我使用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
4

1 回答 1

4

我可以简单地重现您的问题:

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\"]}"

所以要么:

  • 你正在链接两个转储。第一次dump是把字典转成字符串,但是dump一个字符串也是有效的,所以对字符串进行dump、引号、转义等...
  • 您正在转储一个看起来像字典 ( "{12:1,14:2}") 的字符串。

(如果您不确定类型,请type(s)在执行转储之前检查)

所以当你重新加载时

par = json.loads(s)

你得到一个字符串,而不是字典,它解释了使用时的错误消息[](因为你试图将一个键传递给一个字符串)

解决方法:

用于json.loads(json.loads(s))恢复您的数据。

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

于 2017-10-31T13:47:42.453 回答