需要将下面的字符串转为字典(python) 使用json.loads无效,请教
{"deviceId":188698,"timestamp":1659318705,"data":"{\"method\":\"addUser\",\"id\":\"881237810\",\"jsonrpc\":\"2.0\",\"params\":[188698,{\"customerFlag\":\"face\",\"defaultFloor\":null,\"deptId\":0,\"deptList\":null,\"deptName\":null,\"fingerPrintList\":[],\"floorList\":null,\"icCardList\":[\"110447d1f\"],\"idCard\":\"\",\"idCardEnabled\":false,\"imageList\":null,\"name\":null,\"number\":null,\"passHint\":null,\"passSpan\":{\"defaultFloor\":null,\"floorList\":[],\"startTime\":\"1999-01-01 00:00:00\",\"stopTime\":\"2099-01-01 00:00:00\",\"timeAuthId\":62267,\"timeId\":62267},\"passSpanList\":null,\"passwordList\":null,\"phone\":\"15602853293\",\"qrId\":\"71d7b85353dfd1d8\",\"removable\":false,\"userId\":1947615207165952}]}","deviceType":"85","deviceCategory":null,"messageId":798353881653514240,"apiVersion":null,"cmdType":2}
之前发错了 源代码少了个转义符怎么搞呢 麻烦了
你json字符串不满足json格式,解析报错了,data后边的属性多了冒号,改成下面这样就可以了,需要把冒号去除
import re
import json
if __name__ == '__main__':
response_str = '{"data":"{"jsonrpc":"2.0","id":"1675082373","result":{"code":10,"data":{"logUrl":"","sn":"864279032053246","uploadTime":1622789374,"version":"3.1.0_200011"},"msg":"success","success":true}}","deviceId":999022216,"deviceType":20,"messageId":645138762879549440,"timeout":1,"timestamp":1622789374}'
print(json.loads(re.sub('(.*"data":)"(.*\})"(,.*)', '\\1\\2\\3', response_str)))
您的采纳就是对我最大的动力,谢谢!!!
你json格式不对(data冒号后面的大括号不需要引号),改成下面这样就可以了
import json
json_str= '{ "data": { "jsonrpc": "2.0","id": "1675082373","result": {"code": 10,"data": {"logUrl": "","sn": "864279032053246","uploadTime": 1622789374, "version": "3.1.0_200011" }, "msg": "success", "success": true } }, "deviceId": 999022216, "deviceType": 20, "messageId": 645138762879549440, "timeout": 1, "timestamp": 1622789374}'
j_d = json.loads(json_str)
这是个字符串,直接用str函数就可以转换为字典
data = '{"data":"{"jsonrpc":"2.0","id":"1675082373","result":{"code":10,"data":{"logUrl":"","sn":"864279032053246","uploadTime":1622789374,"version":"3.1.0_200011"},"msg":"success","success":true}}","deviceId":999022216,"deviceType":20,"messageId":645138762879549440,"timeout":1,"timestamp":1622789374}'
data1 = str(data)
正则略麻烦,直接使用替换就可以,代码如下:
s = '{"data":"{"jsonrpc":"2.0","id":"1675082373","result":{"code":10,"data":{"logUrl":"","sn":"864279032053246","uploadTime":1622789374,"version":"3.1.0_200011"},"msg":"success","success":true}}","deviceId":999022216,"deviceType":20,"messageId":645138762879549440,"timeout":1,"timestamp":1622789374}'
new_s = s.replace(r'"{"', r'{"')
new_s = new_s.replace('}}"', '}}')
print(json.loads(new_s))
字符串后面加两个替换函数,代码如下:
```python
import json
data = json.loads('{"data":"{"jsonrpc":"2.0","id":"1675082373","result":{"code":10,"data":{"logUrl":"","sn":"864279032053246","uploadTime":1622789374,"version":"3.1.0_200011"},"msg":"success","success":true}}","deviceId":999022216,"deviceType":20,"messageId":645138762879549440,"timeout":1,"timestamp":1622789374}'.replace('"{','{').replace('}"','}'))
```
{
"data":{
"jsonrpc":"2.0",
"id":"1675082373",
"result":{
"code":10,
"data":{
"logUrl":"",
"sn":"864279032053246",
"uploadTime":1622789374,
"version":"3.1.0_200011"
},
"msg":"success",
"success":true
}
},
"deviceId":999022216,
"deviceType":20,
"messageId":645138762879549440,
"timeout":1,
"timestamp":1622789374
}
json没有问题,转义是为了在设备上执行,防止发送时被转义导致执行失败
原因是python 不识别 null
,需要改为 ‘null’ ,或者定义null为变量,进行引用