如何去除嵌套json中的反斜杠

2024-09-30 10:28:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我向后端API发出请求,并以json格式获取数据

反应是这样的。请注意,主体键值将不同,有超过100个。data1.json如下所示

[
    {
        "body": "[{\"task_ids\":[],\"accounts\":[],\"entity_ids\":[12814],\"guid\":\"2DFEB337-5F5D-4DF5-84CF-E951D237D448\",\"id\":\"0034030fb97251b3\",\"subject\":\"Uploaded Application\"}]",
        code": 200,
        "headers": {
            "Content-Type": "application/json"
        },
        "msg": "OK",
        "name": "0"
    },
   {
        "body": "[{\"task_ids\":[],\"accounts\":[],\"entity_ids\":[12814],\"guid\":\"2DFEB337-5F5D-4DF5-84CF-E951D237D448\",\"id\":\"0034030fb97251b3\",\"subject\":\"Uploaded Application\",\}]",
        code": 200,
        "headers": {
            "Content-Type": "application/json"
        },
        "msg": "OK",
        "name": "0"
    },

...
]

我需要摆脱

  1. json响应中的所有body键中都有“\”
  2. 将键[body']连接到一个数组中

理想情况下应该是这样的。在

^{pr2}$

我尝试过replace和很多方法,但是没有一个方法可以替换\所以我甚至不能进入第2步。我发现,如果我把它保存到一个文本文件中,反斜杠会被替换,但是我不能再次将响应作为json对象发送回来。到目前为止,获取data1.json文件的代码如下所示。在

data = json.loads(r.text)


with open('data1.json', 'w') as outfile:
     json.dump(data, outfile, sort_keys = True, indent = 4,
               ensure_ascii = False)

关于如何达到我期望的输出的第一点有什么建议吗?谢谢。在


Tags: idjsonidstaskapplicationcodebodyheaders
2条回答

JSON数据格式不正确且JSON无效(“key”字符串中缺少引号(例如code": 200,),第二个字典正文对象中的语法无效,如mentioned in comment(例如"Uploaded Application\",\}]"))。在

但是,在修复这些问题之后,可以使用一个简单的str.replace()语句来获得预期的JSON格式。然后,只需解析JSON内容并构建所需的列表:

import json

data = '''[
    {
        "body": "[{\"task_ids\":[],\"accounts\":[],\"entity_ids\":[12814],\"guid\":\"2DFEB337-5F5D-4DF5-84CF-E951D237D448\",\"id\":\"0034030fb97251b3\",\"subject\":\"Uploaded Application\"}]",
        "code": 200,
        "headers": {
            "Content-Type": "application/json"
        },
        "msg": "OK",
        "name": "0"
    },
   {
        "body": "[{\"task_ids\":[],\"accounts\":[],\"entity_ids\":[12814],\"guid\":\"2DFEB337-5F5D-4DF5-84CF-E951D237D448\",\"id\":\"0034030fb97251b3\",\"subject\":\"Uploaded Application\"}]",
        "code": 200,
        "headers": {
            "Content-Type": "application/json"
        },
        "msg": "OK",
        "name": "0"
    }
]'''

r = json.loads(data.replace('\\', '').replace('"[', "[").replace("]\"", "]"))

l = []

for d in r:
    l.append(d)

现在检查l的内容:

^{pr2}$

(对于初学者来说,您提供的是无效的JSON,json要么无法完全解析它,要么生成虚假的东西。您需要确保正确提取响应,如果这确实是响应,请让发送方修复它。)
现在,关于被问到的问题:


你不需要做什么特别的事。这就是JSON如何表示本身包含JSON特殊字符的值(“用反斜杠转义”)。在

如果您通过一个合适的JSON解析器(例如json.loads())加载数据,它将撤消该转义,并且在data[0]['body']中,您将看到正确的数据。在

当然,由于该字符串本身就是JSON,如果需要将其拆分为有意义的部分,那么还需要使用json进一步解析它。。。在

相关问题 更多 >

    热门问题