字符串转为字典(python)

需要将下面的字符串转为字典(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)))

您的采纳就是对我最大的动力,谢谢!!!

img

你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))

img

字符串后面加两个替换函数,代码如下:


```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
}

可以查看手册:python- 字典 中的内容

json没有问题,转义是为了在设备上执行,防止发送时被转义导致执行失败

原因是python 不识别 null ,需要改为 ‘null’ ,或者定义null为变量,进行引用

img

img


img

img