Python解析包含转义字符\"的json数据

时间:2022-12-02 08:02:59
js1 = '''{
    "data": "[{\"text\":\"角色权限\",\"nodes\":[{\"text\":\"超级管理员\",\"roleId\":\"1\",\"state\":{\"disabled\":true},\"state\":{\"disabled\":true}},{\"text\":\"券商管理员\",\"roleId\":\"2\"},{\"text\":\"公司管理员\",\"roleId\":\"3\"},{\"text\":\"产品管理员\",\"roleId\":\"4\"},{\"text\":\"信息浏览员\",\"roleId\":\"5\"},{\"text\":\"风险管理员\",\"roleId\":\"6\"},{\"text\":\"交易员\",\"roleId\":\"8\",\"state\":{\"checked\":true}},{\"text\":\"T0交易员\",\"roleId\":\"9\",\"state\":{\"checked\":true}},{\"text\":\"TSI交易员\",\"roleId\":\"10\"},{\"text\":\"xxxxxx\",\"roleId\":\"18\"},{\"text\":\"ROLE_HAHA\",\"roleId\":\"35\"},{\"text\":\"ROLE_AUTO_INSERT\",\"roleId\":\"98\"}]}]",
    "message": "获取成功!",
    "success": true
}'''

data1 = json.loads(js1) 直接报json格式错误,但如果前面加个r变成原始字符串,则可以是正确的json格式,可是js1这个字符串是动态获取的,不好直接在前面加r的

有没有大神能解析出上面的json字符串,求助攻

1 个解决方案

#1


其实只要把"data": "[{}]"  改成 "data": [{}] 就好了,估计对方是拼出来的json 而且还没拼好。
js1 = '''{
    "data": "[{\"text\":\"角色权限\",\"nodes\":[{\"text\":\"超级管理员\",\"roleId\":\"1\",\"state\":{\"disabled\":true},\"state\":{\"disabled\":true}},{\"text\":\"券商管理员\",\"roleId\":\"2\"},{\"text\":\"公司管理员\",\"roleId\":\"3\"},{\"text\":\"产品管理员\",\"roleId\":\"4\"},{\"text\":\"信息浏览员\",\"roleId\":\"5\"},{\"text\":\"风险管理员\",\"roleId\":\"6\"},{\"text\":\"交易员\",\"roleId\":\"8\",\"state\":{\"checked\":true}},{\"text\":\"T0交易员\",\"roleId\":\"9\",\"state\":{\"checked\":true}},{\"text\":\"TSI交易员\",\"roleId\":\"10\"},{\"text\":\"xxxxxx\",\"roleId\":\"18\"},{\"text\":\"ROLE_HAHA\",\"roleId\":\"35\"},{\"text\":\"ROLE_AUTO_INSERT\",\"roleId\":\"98\"}]}]",
    "message": "获取成功!",
    "success": true
}'''
p = re.compile("(data['\"]?: *['\"])(.+)(['\"],)")
data = p.search(js1).group(2)
js2 = p.sub(r"\1\3", js1)
jsDict = json.loads(js2)
jsDict['data'] = json.loads(data)
print jsDict

#1


其实只要把"data": "[{}]"  改成 "data": [{}] 就好了,估计对方是拼出来的json 而且还没拼好。
js1 = '''{
    "data": "[{\"text\":\"角色权限\",\"nodes\":[{\"text\":\"超级管理员\",\"roleId\":\"1\",\"state\":{\"disabled\":true},\"state\":{\"disabled\":true}},{\"text\":\"券商管理员\",\"roleId\":\"2\"},{\"text\":\"公司管理员\",\"roleId\":\"3\"},{\"text\":\"产品管理员\",\"roleId\":\"4\"},{\"text\":\"信息浏览员\",\"roleId\":\"5\"},{\"text\":\"风险管理员\",\"roleId\":\"6\"},{\"text\":\"交易员\",\"roleId\":\"8\",\"state\":{\"checked\":true}},{\"text\":\"T0交易员\",\"roleId\":\"9\",\"state\":{\"checked\":true}},{\"text\":\"TSI交易员\",\"roleId\":\"10\"},{\"text\":\"xxxxxx\",\"roleId\":\"18\"},{\"text\":\"ROLE_HAHA\",\"roleId\":\"35\"},{\"text\":\"ROLE_AUTO_INSERT\",\"roleId\":\"98\"}]}]",
    "message": "获取成功!",
    "success": true
}'''
p = re.compile("(data['\"]?: *['\"])(.+)(['\"],)")
data = p.search(js1).group(2)
js2 = p.sub(r"\1\3", js1)
jsDict = json.loads(js2)
jsDict['data'] = json.loads(data)
print jsDict