【问题标题】:How to get JSON.loads() output in dictionary type but not string type using PYTHON如何使用 PYTHON 以字典类型而不是字符串类型获取 JSON.loads() 输出
【发布时间】:2017-06-15 07:11:03
【问题描述】:

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

我的问题是,当我使用加载格式时,输出必须是 dictionary 类型,但我不知道为什么我的输出是 string 类型。如何将此 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

【问题讨论】:

  • 您正在转储json 字符串而不是python dict(您正在转储转储......)。不要使用json 转储字符串,直接写即可。
  • @Jean-François Fabre 它也对我有帮助 谢谢:)
  • @Jean-FrançoisFabre 是什么意思“不要使用 json 转储字符串,只写它”我正在努力解决同样的错误,但没有得到你的评论:(
  • @soommy12 既然你能够挖掘这个问题并且你有同样的问题,那么我做了一个答案。如果你理解得更好,请告诉我。

标签: json python-3.x python-requests python-responses


【解决方案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\"]}"

所以要么:

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

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

所以当你重新加载时

par = json.loads(s)

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

解决方法:

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

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

【讨论】:

  • 我理解你所说的,但在我的代码中我只使用了一次dumps。无论如何,我认为如果我有格式为 json 的字符串,我应该使用 loads 方法轻松地将其转换为 obj
  • 你正在对已经是字符串的东西使用转储。如果已经是字符串,直接写入文件即可,不要使用json
  • 我可以像普通字典一样迭代它吗?
  • 现在这似乎是一个不同的问题。也许你可以发布你自己的问题。我不确定这个答案是否能回答您的问题。
猜你喜欢
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2019-11-21
  • 2011-01-25
相关资源
最近更新 更多