python - 在 python 中解析带有特殊字符 \" 的 JSON 对象
问题描述
我在 python 中解析 JSON 字符串时遇到问题。我有以下字符串:
{"{\"rid\":\"PHMJ3BD77P81B225A0GM\",\"sid\":\"259-2748551-5638001\",\"mid\":\"A1PA6795UKMFR9\",\"sn\":\"www.amazon.de\",\"reqs\":[{\"cap-ciba\":{\"k\":\"fwcim\",\"t\":1522150437949,\"md\":\" +I42uPPjwZf0N \",\"p\":\"https://www.amazon.de/ap/signin?clientContext":"257-0866472-4844452","openid.return_to":"https%3A%2F%2Fwww.amazon.de%2Fkindle-dbs%2Fku%2Fku-central%3Fref_%3Dnav_youraccount_ku%26_encoding%3DUTF8","openid.identity":"http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select","openid.assoc_handle":"amzn_kplp_desktop_de","openid.mode":"checkid_setup","marketPlaceId":"A1PA6795UKMFR9","openid.claimed_id":"http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select","pageId":"amzn_aui_light","openid.ns":"http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0","openid.pape.max_auth_age":"3600","siteState":"clientContext%3D259-2748551-5638001%2CsourceUrl%3Dhttps%253A%252F%252Fwww.amazon.de%252Fkindle-dbs%252Fku%252Fku-central%253Fref_%253Dnav_youraccount_ku%2526_encoding%253DUTF8%2Csignature%3DikQPbHmIyj2F3VCmlAXOMRBtpWIRAj3D\"}}]}"}
该字符串来自我在 Amazon 上捕获的 HTTP 请求。因此,我无法控制输入。
我想在 python 中自动解析这个字符串(使用json.loads()
)。但是,解析字符串不起作用(Expecting : delimiter: line 1 column 5 (char 4)
)。如果我使用 json.laods(r"""[my_input_string]""") (将字符串转换为“原始字符串”),则成功解析对象。
如何告诉 Python 将字符串解释为原始字符串?我已经尝试过.escape("string_escape")
,.repalce(“\\”, “\\\\”)
但都没有工作。
提前致谢。
解决方案
您可以使用literal_eval删除所有转义序列。
In [29]: x = {"{\"rid\":\"PHMJ3BD77P81B225A0GM\",\"sid\":\"259-2748551-5638001\",\"mid\":\"A1PA6795UKMFR9\",\"sn\":\"www.amazon.de\",\"reqs\":[{\"cap-ciba\":{\"k\":\"fwcim\",\"t\
...: ":1522150437949,\"md\":\" +I42uPPjwZf0N \",\"p\":\"https://www.amazon.de/ap/signin?clientContext":"257-0866472-4844452","openid.return_to":"https%3A%2F%2Fwww.amazon.de%2
...: Fkindle-dbs%2Fku%2Fku-central%3Fref_%3Dnav_youraccount_ku%26_encoding%3DUTF8","openid.identity":"http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select","openid.
...: assoc_handle":"amzn_kplp_desktop_de","openid.mode":"checkid_setup","marketPlaceId":"A1PA6795UKMFR9","openid.claimed_id":"http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fide
...: ntifier_select","pageId":"amzn_aui_light","openid.ns":"http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0","openid.pape.max_auth_age":"3600","siteState":"clientContext%3D259-274
...: 8551-5638001%2CsourceUrl%3Dhttps%253A%252F%252Fwww.amazon.de%252Fkindle-dbs%252Fku%252Fku-central%253Fref_%253Dnav_youraccount_ku%2526_encoding%253DUTF8%2Csignature%3Dik
...: QPbHmIyj2F3VCmlAXOMRBtpWIRAj3D\"}}]}"}
In [30]: from ast import literal_eval
In [31]: literal_eval(str(x))
Out[31]:
{'marketPlaceId': 'A1PA6795UKMFR9',
'openid.assoc_handle': 'amzn_kplp_desktop_de',
'openid.claimed_id': 'http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select',
'openid.identity': 'http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select',
'openid.mode': 'checkid_setup',
'openid.ns': 'http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0',
'openid.pape.max_auth_age': '3600',
'openid.return_to': 'https%3A%2F%2Fwww.amazon.de%2Fkindle-dbs%2Fku%2Fku-central%3Fref_%3Dnav_youraccount_ku%26_encoding%3DUTF8',
'pageId': 'amzn_aui_light',
'siteState': 'clientContext%3D259-2748551-5638001%2CsourceUrl%3Dhttps%253A%252F%252Fwww.amazon.de%252Fkindle-dbs%252Fku%252Fku-central%253Fref_%253Dnav_youraccount_ku%2526_encoding%253DUTF8%2Csignature%3DikQPbHmIyj2F3VCmlAXOMRBtpWIRAj3D"}}]}',
'{"rid":"PHMJ3BD77P81B225A0GM","sid":"259-2748551-5638001","mid":"A1PA6795UKMFR9","sn":"www.amazon.de","reqs":[{"cap-ciba":{"k":"fwcim","t":1522150437949,"md":" +I42uPPjwZf0N ","p":"https://www.amazon.de/ap/signin?clientContext': '257-0866472-4844452'}
In [32]:
推荐阅读
- python - 如何计算去噪图像质量?
- d3.js - d3 obj.exit() 正在工作,但 obj.enter() 为“之前的节点不是该节点的子节点”引发错误
- html - 均匀分布的 HTML 元素
- vba - VBA查找和替换功能 - 在哪里放置循环?微软字
- android - BottomSheet:嵌套滚动问题(RecyclerView 和 NestedScrollView)
- scheme - 如何在 Scheme 中使用生成器制作列表
- swift - SwiftUI 中的动画状态变化
- angular - 通过使用 Angular 编程重定向到特定路线
- powerbi - 根据分隔符将文本文件拆分为行和列
- javascript - 如何在 Google Chrome 扩展程序中获取基本 URL