将指定XML转换为JSON:键名大写且采用无多映射循环的简便方法
将XML转换为键名大写的JSON(简便实现)
输入XML
<employees> <employee> <id> <name>Mohan</name> <dept>Admin</dept> </id> <id> <name>ravi</name> <dept>Network</dept> </id> </employee> </employees>
实现思路
利用XML解析库的内置处理器在解析阶段直接将键名转为大写,避免后续多轮循环映射。以Python的xmltodict库为例,通过传入自定义postprocessor函数,在解析每个节点时同步转换键名,同时配置force_list确保重复节点(如多个<id>)被解析为数组。
代码实现
import xmltodict import json def uppercase_key_postprocessor(path, key, value): # 将节点键名转为大写,返回处理后的键值对 return key.upper(), value xml_content = """ <employees> <employee> <id> <name>Mohan</name> <dept>Admin</dept> </id> <id> <name>ravi</name> <dept>Network</dept> </id> </employee> </employees> """ # 解析XML,配置强制列表和自定义处理器 result_dict = xmltodict.parse( xml_content, postprocessor=uppercase_key_postprocessor, force_list={'ID'} ) # 转换为格式化的JSON字符串 json_result = json.dumps(result_dict, indent=2) print(json_result)
输出结果
{ "EMPLOYEES": { "EMPLOYEE": { "ID": [ { "NAME": "Mohan", "DEPT": "Admin" }, { "NAME": "ravi", "DEPT": "Network" } ] } } }
关键说明
postprocessor函数在解析每个XML节点时触发,直接修改键名为大写,无需后续遍历整个字典做映射,实现一步到位。force_list={'ID'}指定<id>节点强制转为数组,避免单个节点时被解析为普通对象、多个节点时才转为数组的不一致问题。
内容的提问来源于stack exchange,提问作者deepuKumar
相关产品推荐
相关产品推荐

