我向后端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"
},
...
]
我需要摆脱
理想情况下,它应该看起来像这样。
[
{"body":"[{"task_ids":[],"accounts":[],"entity_ids":[12814],"guid":"2DFEB337-5F5D-4DF5-84CF-E951D237D448","id":"0034030fb97251b3","subject":"Uploaded Application",]","[{"task_ids":[],"accounts":[],"entity_ids":[12814],"guid":"2DFEB337-5F5D-4DF5-84CF-E951D237D448","id":"0034030fb97251b3","subject":"Uploaded Application",]",..}
]
我尝试了替换操作,但是有很多方法都没有替换\,所以我什至无法执行第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)
关于如何达到期望输出中的第一点的任何建议?谢谢。
答案 0 :(得分:0)
(对于初学者来说,您提供的是无效的JSON,而json
将无法完全解析它或产生伪造的东西。您需要确保正确提取了响应,如果是真正的回应是,请发送方对其进行修复。)
现在,关于所问的问题:
您不需要做任何特别的事情。这就是JSON表示本身包含JSON特殊字符(用反斜杠“转义”)的值的方式。
如果您通过适当的JSON解析器(例如json.loads()
)加载数据,它将撤消这种转义,例如data[0]['body']
,您将看到正确的数据。
当然,由于该字符串本身就是JSON,因此,如果需要将其拆分为有意义的部分,则还需要进一步用json
对其进行解析...
答案 1 :(得分:0)
JSON数据格式错误,并且JSON无效(“键”字符串中缺少引号(例如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
的内容:
>>> l
[{u'body': [{u'entity_ids': [12814], u'accounts': [], u'task_ids': [], u'guid': u'2DFEB337-5F5D-4DF5-84CF-E951D237D448', u'id': u'0034030fb97251b3', u'subject': u'Uploaded Application'}], u'headers': {u'Content-Type': u'application/json'}, u'code': 200, u'name': u'0', u'msg': u'OK'},
{u'body': [{u'entity_ids': [12814], u'accounts': [], u'task_ids': [], u'guid': u'2DFEB337-5F5D-4DF5-84CF-E951D237D448', u'id': u'0034030fb97251b3', u'subject': u'Uploaded Application'}], u'headers': {u'Content-Type': u'application/json'}, u'code': 200, u'name': u'0', u'msg': u'OK'}]