我有一个作为 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)