【问题标题】:How to remove @ prefix while converting xml to json in Python如何在Python中将xml转换为json时删除@前缀
【发布时间】:2019-12-19 06:36:53
【问题描述】:

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

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",
}

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

【问题讨论】:

  • 你能显示xml文件的内容吗?
  • @Solen'ya:下面是 xml 内容。 google.com">

标签: python python-3.x xmltodict xml-to-json


【解决方案1】:

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

以下更改对我有用:

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

【讨论】:

    【解决方案2】:

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

    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'}}
    

    【讨论】:

    • @steve.dev 的解决方案会给出错误的输出。它将从 CustomerInfo 键中删除“C”
    • @ Vaibhav Jadhav:不幸的是,您的解决方案不适用于我的复杂 json。
    猜你喜欢
    • 1970-01-01
    • 2015-09-27
    • 2017-11-30
    • 2012-02-17
    • 1970-01-01
    • 2010-10-03
    • 2010-10-03
    • 2020-04-04
    • 2012-01-31
    相关资源
    最近更新 更多