python 解析json typeerror_TypeError:在使用Python解析JSON时,字符串索引必须是整数?...

问题是jsonStr是一个字符串,它用JSON编码一些对象,而不是实际的对象。

显然,你知道这是一个字符串,因为你称它为jsonStr。事实证明这条线是有效的:jsonStr = data.decode("utf-8")

所以,jsonStr是一个字符串。对字符串调用json.dumps是完全合法的。不管该字符串是某个对象的JSON编码,还是您的姓氏;您都可以用JSON编码该字符串。然后你可以解码这个字符串,得到原始字符串。

所以,这个:j = json.loads(json.dumps(jsonStr))

…将返回与j中的jsonStr完全相同的字符串。你还没有把它解码成原始对象。

要做到这一点,不要做额外的编码:j = json.loads(jsonStr)

如果不清楚,请尝试使用交互式终端:>>> obj = ['abc', {'a': 1, 'b': 2}]

>>> type(obj)

list

>>> obj[1]['b']

2

>>> j = json.dumps(obj)

>>> type(j)

str

>>> j[1]['b']

TypeError: string indices must be integers

>>> jj = json.dumps(j)

>>> type(jj)

str

>>> j

'["abc", {"a": 1, "b": 2}]'

>>> jj

'"[\\"abc\\", {\\"a\\": 1, \\"b\\": 2}]"'

>>> json.loads(j)

['abc', {'a': 1, 'b': 2}]

>>> json.loads(j) == obj

True

>>> json.loads(jj)

'["abc", {"a": 1, "b": 2}]'

>>> json.loads(jj) == j

True

>>> json.loads(jj) == obj

False

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值