python - 中间包含 `\\\` 的 JSON 数据

标签 python json http flask

<分区>

我有一个作为 Flask 应用程序编写的 python 监听服务器。该服务器正在监听来自远程源的 POST 消息。远程源正在发布 JSON 文档。我收到的示例 JSON 文档如下所示。

{

    "Timestamp": "1432241553492",
    "data": "[{\"EventName\":\"Time\",\"Category\":\"Experience\",\"Severity\":\"warn\",\"Subject\":\"Time\",\"Message\":\"details:{\\\"Message\\\":\\\"https://xxxx.xxxxx.com/ (1882 ms : ATime: 5 ms, BTime: 1108 ms, CTime: 769 ms), \\\",\\\"Time\\\":\\\"Fri May 22 2015 08:52:33 GMT+1200 (NZST)\\\",\\\"MobileDevice\\\":\\\"Not Mobile\\\",\\\"User\\\":\\\"user.name\\\",\\\"CPUs\\\":8,\\\"Language\\\":\\\"en-GB\\\",\\\"isEvent\\\":\\\"true\\\",\"Stamp\":\"1432241553492\"}]",
    "msgType": "0",
    "tid": "1"
}

这个文件应该是一个正确的 JSON 文件。但我在字段之间得到 \\\ 如上所示。我想知道我的 Http OPTIONS 设置是否有问题监听服务器或数据类型。 如果有人能帮我解决这个问题,那就太好了。

最佳答案

乍一看,您似乎有一个拙劣的 JSON 文件;那里有一个杂散的 ," 序列破坏了格式。

如果您删除了条目,很可能是您破坏了格式;如果您的实际字符串在 http://jsonlint.com 上验证然后你就这样做了。

反斜杠是 JSON 中的有效转义序列。您有包含其他 JSON 字符串的数据,这些字符串又包含更多 编码的 JSON 数据。您可以递归解码这些:

>>> import json
>>> print json.dumps({'object': 'deeply nested'})
{"object": "deeply nested"}
>>> print json.dumps({'wrapper': json.dumps({'object': 'deeply nested'})})
{"wrapper": "{\"object\": \"deeply nested\"}"}
>>> print json.dumps({'outermost': json.dumps({'wrapper': json.dumps({'object': 'deeply nested'})})})
{"outermost": "{\"wrapper\": \"{\\\"object\\\": \\\"deeply nested\\\"}\"}"}

请注意,随着换行级别的增加,反斜杠也会增加。首先,嵌入的 " 引号转义为 \",然后将反斜杠和引号转义为 \\\",等等。

您可能想要修复生成此嵌套的代码。不要对单个对象进行编码,然后将它们存储在其他东西中。

不要这样做:

event['details'] = json.dumps(event_detail_data)
message['data'] = json.dumps(event)
json_to_send = json.dumps(message)

这会创建一个嵌套结构。只对最终对象进行编码:

event['details'] = event_detail_data
message['data'] = event
json_to_send = json.dumps(message)

关于python - 中间包含 `\\\` 的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30384261/

相关文章:

javascript - Handlebars 中的访问对象属性包含 '.'

javascript - 这个 Javascript 计数循环是如何工作的? - 创建测验的输出

java - UrlConnection.getHeaderField(字符串名称) 返回 null

html - HTTP header 构造

javascript - 支持 DNSSEC 和/或实验性新 RR 类型的 DNS 解析器库

python - 删除反斜杠继续字符

python - Python input()函数引发EOF错误

python - 如何在 session 过期后自动触发 session 删除?

javascript - 在选择选项值中使用 Json - 由于双引号引起的错误

http - 我应该使用 HTTP 4xx 来指示 HTML 表单错误吗?