使用反斜杠编码解码JSON数据

时间:2015-05-25 01:00:58

标签: python json

我有以下JSON数据。

"[
    \"msgType\": \"0\",
    \"tid\": \"1\",
    \"data\": \"[
        {
            \\\"EventName\\\": \\\"TExceeded\\\",
            \\\"Severity\\\": \\\"warn\\\",
            \\\"Subject\\\": \\\"Exceeded\\\",
            \\\"Message\\\": \\\"tdetails: {
                \\\\\\\"Message\\\\\\\": \\\\\\\"my page tooktoolong(2498ms: AT: 5ms,
                BT: 1263ms,
                CT: 1230ms),
                andexceededthresholdof5ms\\\\\\\",
                \\\\\\\"Referrer\\\\\\\": \\\\\\\"undefined\\\\\\\",
                \\\\\\\"Session\\\\\\\": \\\\\\\"None\\\\\\\",
                \\\\\\\"ResponseTime\\\\\\\": 0,
                \\\\\\\"StatusCode\\\\\\\": 0,
                \\\\\\\"Links\\\\\\\": 215,
                \\\\\\\"Images\\\\\\\": 57,
                \\\\\\\"Forms\\\\\\\": 2,
                \\\\\\\"Platform\\\\\\\": \\\\\\\"Linuxx86_64\\\\\\\",
                \\\\\\\"BrowserAppname\\\\\\\": \\\\\\\"Netscape\\\\\\\",
                \\\\\\\"AppCodename\\\\\\\": \\\\\\\"Mozilla\\\\\\\",
                \\\\\\\"CPUs\\\\\\\": 8,
                \\\\\\\"Language\\\\\\\": \\\\\\\"en-GB\\\\\\\",
                \\\\\\\"isEvent\\\\\\\": \\\\\\\"true\\\\\\\",
                \\\\\\\"PageLatency\\\\\\\": 2498,
                \\\\\\\"Threshold\\\\\\\": 5,
                \\\\\\\"AT\\\\\\\": 5,
                \\\\\\\"BT\\\\\\\": 1263,
                \\\\\\\"CT\\\\\\\": 1230
            }\\\",
            \\\"EventTimestamp\\\": \\\"1432514783269\\\"
        }
    ]\",
    \"Timestamp\": \"1432514783269\",
    \"AppName\": \"undefined\",
    \"Group\": \"UndefinedGroup\"
]"

我想将这个JSON文件变成一个包装级别。我希望删除里面的嵌套结构并将该数据复制到顶级JSON结构。我怎么能这样做?

如果此结构名称为json_data

我希望能够访问

json_data['Platform']
json_data[BrowserAppname']
json_data['Severity']
json_data['msgType']

基本上是某种基本的规范化。使用python做最简单的方法是什么

2 个答案:

答案 0 :(得分:0)

一般情况下不安全但在这种情况下解决方案可能没问题:

import json

d = json.loads(json_string.replace('\\', ''))

答案 1 :(得分:0)

我不确定发生了什么,但这看起来不像JSON。

  1. 你有一些双引号转义一次,一些两次,三次等等。
  2. 您在类似列表的对象[]
  3. 中有键/值对
  4. tdetails缺少尾随报价
  5. 即使你修复了上述问题,你仍然会将data列表作为无效的多行字符串引用。

    似乎这个“JSON”是由不知道JSON的人手工构建的。

    您可以尝试使用以下内容将数据“按摩”到JSON中:

    import re
    x = re.sub(r'\\+', '', js_str)
    x = re.sub(r'\n', '', js_str)
    x = '{' + js_str.strip()[1:-1] + '}'
    

    这会使字符串几乎像json一样,但你仍需要修复#3点。