我现在很困惑为什么我不能解析这个JSON字符串。类似的代码可以在其他JSON字符串上运行,但不能在这个字符串上运行——我正在尝试解析JSON字符串并从JSON中提取脚本。
下面是我的代码。
for step in steps:
step_path = '/example/v1' +'/'+step
data, stat = zk.get(step_path)
jsonStr = data.decode("utf-8")
print(jsonStr)
j = json.loads(json.dumps(jsonStr))
print(j)
shell_script = j['script']
print(shell_script)
所以第一个print(jsonStr)
将打印出类似这样的内容-
{"script":"#!/bin/bash\necho Hello world1\n"}
第二个print(j)
将打印出类似这样的内容-
{"script":"#!/bin/bash\necho Hello world1\n"}
然后第三张照片没有打印出来,这就产生了一个错误-
Traceback (most recent call last):
File "test5.py", line 33, in <module>
shell_script = j['script']
TypeError: string indices must be integers
所以我想知道我在这里做错了什么?
我使用了上面的代码来解析JSON,它工作得很好。。
问题是jsonStr是一个字符串,它用JSON编码一些对象,而不是实际的对象。
显然,你知道这是一个字符串,因为你称它为
jsonStr
。事实证明这条线是有效的:所以,
jsonStr
是一个字符串。对字符串调用json.dumps
是完全合法的。不管该字符串是某个对象的JSON编码,还是您的姓氏;您都可以用JSON编码该字符串。然后你可以解码这个字符串,得到原始字符串。所以,这个:
…将返回与
j
中的jsonStr
完全相同的字符串。你还没有把它解码成原始对象。要做到这一点,不要做额外的编码:
如果不清楚,请尝试使用交互式终端:
尝试用
j = json.loads(jsonStr)
替换j = json.loads(json.dumps(jsonStr))
。相关问题 更多 >
编程相关推荐