我有一个要转换为json的字符串。
字符串如下:
s='{\\'kind\\': 1, \\'topic\\': \\'manufacturing_device\\', \\'message_type\\': 1, \\'txid\\': \\'6bcc6212a8\\', \\'name\\': \\'manufacturing\\'}'
我使用json转储和加载,而不是
jStr = json.dumps(s)
loadStr = json.loads(jStr)
然后我需要访问loadStr ['topic'],它给我错误“字符串索引必须是整数'
然后我想也许我需要替换"\\"
因此,我做了s.replace('\\\'', '\"')
并且也没有工作。
知道我做错了什么吗?顺便说一下,我使用python 3.6
答案 0 :(得分:0)
错误是因为loadStr
是一个字符串。所以,你不能在字符串上使用getitem
。
答案 1 :(得分:0)
你只需将json打包成一个字符串,而不是python对象。
那么你试图通过这一行的键获得价值
loadStr = json.loads(jStr)
你会收到这个字符串。
所以我认为你需要这样的东西:
import json
s='{"kind": 1, "topic": "manufacturing_device", "message_type": 1, "txid": "6bcc6212a8", "name": "manufacturing"}'
load_str = json.loads(s)
print(load_str['kind'])
顺便说一句,当你使用python字符串时,使用单引号和双引号更容易,以免转义相同的引号。
s='{"kind": 1, "topic": "manufacturing_device", "message_type": 1, "txid": "6bcc6212a8", "name": "manufacturing"}'
答案 2 :(得分:0)
你可以使用这样的东西
import ast
s='{\'kind\': 1, \'topic\': \'manufacturing_device\', \'message_type\': 1, \'txid\': \'6bcc6212a8\', \'name\': \'manufacturing\'}'
ne = ast.literal_eval(s)
print(type(ne))
print(ne['topic'])
输出
<class 'dict'>
manufacturing_device
答案 3 :(得分:0)
In [1193]: import json
如果s
是正确的字典,json
可以创建json
字符串:
In [1194]: s={'kind': 1, 'topic': 'manufacturing_device', 'message_type': 1, 'txid': '6bcc6212a8', 'name': 'manufacturing'}
In [1195]: s
Out[1195]:
{'kind': 1,
'message_type': 1,
'name': 'manufacturing',
'topic': 'manufacturing_device',
'txid': '6bcc6212a8'}
In [1196]: astr = json.dumps(s)
In [1197]: astr
Out[1197]: '{"name": "manufacturing", "txid": "6bcc6212a8", "topic": "manufacturing_device", "message_type": 1, "kind": 1}'
请注意s
是字典; astr
是一个字符串。
使用loads
完成往返:
In [1198]: s1 = json.loads(astr)
In [1199]: s1
Out[1199]:
{'kind': 1,
'message_type': 1,
'name': 'manufacturing',
'topic': 'manufacturing_device',
'txid': '6bcc6212a8'}
答案 4 :(得分:0)
In [1193]: import json
如果s
是正确的字典,json
可以创建json
字符串:
In [1194]: s={'kind': 1, 'topic': 'manufacturing_device', 'message_type': 1, 'txid': '6bcc6212a8', 'name': 'manufacturing'}
In [1195]: s
Out[1195]:
{'kind': 1,
'message_type': 1,
'name': 'manufacturing',
'topic': 'manufacturing_device',
'txid': '6bcc6212a8'}
In [1196]: astr = json.dumps(s)
In [1197]: astr
Out[1197]: '{"name": "manufacturing", "txid": "6bcc6212a8", "topic": "manufacturing_device", "message_type": 1, "kind": 1}'
请注意s
是字典; astr
是一个字符串。
使用loads
完成往返:
In [1198]: s1 = json.loads(astr)
In [1199]: s1
Out[1199]:
{'kind': 1,
'message_type': 1,
'name': 'manufacturing',
'topic': 'manufacturing_device',
'txid': '6bcc6212a8'}
访问字典的元素只是标准的Python:
In [1205]: s1['topic']
Out[1205]: 'manufacturing_device'
(编辑与我对已接受答案的评论相关)
此表达式创建一个字符串:
In [1214]: s='{\'kind\': 1, \'topic\': \'manufacturing_device\', \'message_type\': 1, \'txid\': \'6bcc6212a8\', \'name\': \'manufacturing\'}'
In [1215]: s
Out[1215]: "{'kind': 1, 'topic': 'manufacturing_device', 'message_type': 1, 'txid': '6bcc6212a8', 'name': 'manufacturing'}"
它是一个有效的Python表达式,literal_eval
可以评估,并创建一个字典:
In [1216]: ne = ast.literal_eval(s)
In [1217]: ne
Out[1217]:
{'kind': 1,
'message_type': 1,
'name': 'manufacturing',
'topic': 'manufacturing_device',
'txid': '6bcc6212a8'}
无需将其包含在一个或多个json.dumps
中,然后使用loads
或eval
解包。