1

我正在尝试使用xmltodict库将 xml 转换为 python 中的 json。虽然,xml 正在转换为 json,但在 dict 中的每个键之前,“@”都会被添加前缀。以下是代码片段和示例输出:

import xmltodict
import json

with open('response.xml','r') as res_file:
    doc = xmltodict.parse(res_file.read())

xml_json_str = json.dumps(doc)
final_json = json.loads(xml_json_str)

输出:

"CustomerInfo": {
  "@address": "Bangalore, Karnataka 560034",
  "@email": "abc@gmail.com",
  "@name": "Sam",
}

如何一次性从所有键中删除@?

4

2 回答 2

3

最后我找到了一个像魅力一样工作的解决方案。在解析 xml 时,设置attr_prefix=''为从键中删除所有 @。

以下更改对我有用:

with open('response.xml','r') as res_file:
    doc = xmltodict.parse(res_file.read(), attr_prefix='')
于 2019-12-19T11:00:37.877 回答
0

检查一下:它将删除所有节点中的所有键中的所有@:我添加了一个额外的注释,只是为了向您展示示例:

def removeAtTheRate(jsonFile,final_json_edited):
    if jsonFile != {} and type(jsonFile) == dict:
        for i in jsonFile.keys():
            final_json_values = {}
            for j in jsonFile[i]:
                if j[:1] == '@':
                    final_json_values[j[1:]] = jsonFile[i][j]
            if i[:1] == '@':
                final_json_edited[i[1:]] = final_json_values
            else:
                final_json_edited[i] = final_json_values
    print(final_json_edited)

doc = {"@CustomerInfo":{"@address": "Bangalore, Karnataka 560034","@email": "abc@gmail.com","@name": "Sam"},"Location":{"@Loc":"Mum"}}
removeAtTheRate(doc,{})

结果:

>> {'Location': {'Loc': 'Mum'}, 'CustomerInfo': {'name': 'Sam', 'address': 
'Bangalore, Karnataka 560034', 'email': 'abc@gmail.com'}}
于 2019-12-19T07:09:23.007 回答