如果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
解開。
's'不是JSON,並且該語句不是有效的Python。請製作一張[mcve]。考慮到你的實際代碼是有效的,'jStr = json.dumps(s)'會產生's'中的字符串值的JSON表示,所以'json.loads(jStr)'將解碼相同的字符串JSON,而不是你之後的字典。 –