2017-06-15 79 views
2

JSON.loads()输出在字典类型而不是字符串类型,当我使用那样json.dump(的)我得到以下JSON格式如何获得使用Python

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

你正在倾销'json'字符串而不是python字典(你正在倾销一个转储...)。不要使用'json'转储一个字符串,只需写下它。 –

+0

@ Jean-François法布尔它也帮助了我谢谢:) –

+0

@ Jean-FrançoisFabre这是什么意思“不要使用json转储字符串只是写它”我正在与同样的错误挣扎,但没有得到您的评论: ( – soommy12

回答

0

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

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一次。

+0

我明白你说了什么,但是在我的代码中,我正在使用'dumps '只有一次。无论如何,我认为如果我有像json那样格式化的字符串,我应该使用'loads'方法将它转换为obj,然后使用已经是字符串的东西的转储方式 – soommy12

+0

。如果它已经是一个字符串,只需将它直接写入文件,不要使用'json' –

+0

我可以像正常字典一样迭代它吗? – soommy12