如何实现JSON深度解析?嵌套details字段二次解析方法
解决嵌套JSON字段的解析问题
你的问题出在details字段本身是一个被转义的JSON字符串,因此需要二次解析才能将其转为字典。另外注意原字符串存在一处语法错误,会导致解析失败,需要先修正。
修正步骤与代码示例
- 先修正原字符串中
payload部分末尾多余的逗号("username":["test"],里的逗号不符合JSON规范) - 第一次解析外层JSON结构
- 第二次单独解析
details字段的内容
import json # 修正原字符串中的无效逗号 fixed_raw_data = b'{"campaign_id":6,"email":"test@test.ru","time":"2024-01-26T06:05:59.852155Z","message":"Submitted Data","details":"{\\\"payload\\\":{\\\"__RequestVerificationToken\\\":[\\\"CfDJ8EfyW-fedawawdawdwadwadwawadawd-6xqg_ZIdEJBpbAHkDQdNM\\\"],\\\"__original_url\\\":[\\\"https://test-test-test.ru/\\\"],\\\"password\\\":[\\\"test\\\"],\\\"qwe\\\":[\\\"Gg4gTWg\\\"],\\\"username\\\":[\\\"test\\\"]},\\\"browser\\\":{\\\"address\\\":\\\"1.1.1.1\\\",\\\"user-agent\\\":\\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0\\\"}}"}' # 解析外层JSON parsed_data = json.loads(fixed_raw_data) # 解析details字段的嵌套JSON parsed_data['details'] = json.loads(parsed_data['details']) # 验证结果 print(type(parsed_data['details'])) # 输出 <class 'dict'> print(parsed_data['details']['browser']['address']) # 输出 1.1.1.1
关键说明
- 原字符串里
"username":["test"],末尾的逗号是非法的JSON语法,必须移除,否则第二次解析会抛出json.JSONDecodeError - 两次调用
json.loads()是核心逻辑:第一次处理外层的JSON结构,第二次把details字段中的转义JSON字符串转为字典
内容的提问来源于stack exchange,提问作者Салават Абдудин
相关产品推荐
相关产品推荐

