使用ElementTree转换XML至JSON时遭遇ParseError故障排查
问题根源与解决方法
为什么会报错?
你遇到的xml.etree.ElementTree.ParseError完全是因为文件名标错了——你以为input.xml是XML文件,但实际内容是JSON格式的。ElementTree是专门解析XML语法的库,根本识别不了JSON的大括号、键值对结构,自然会报格式错误,和编码处理、换文件无关(除非你换的是真正的XML文件)。
解决方法分两种情况:
如果你的目标就是得到JSON文件:
直接用Python自带的json模块处理这个文件就行,不需要XML解析的步骤。示例代码:import json # 读取伪装成xml的JSON文件 with open('input.xml', 'r', encoding='utf-8') as f: json_data = json.load(f) # 输出为标准JSON文件(可选,也可以直接用读取到的数据) with open('output.json', 'w', encoding='utf-8') as f: json.dump(json_data, f, indent=4, ensure_ascii=False)如果你的真实需求是把XML转JSON,但拿错了文件:
先找到真正的XML文件,再用ElementTree解析后转成JSON结构。这里给一个递归遍历XML元素转字典的示例:import xml.etree.ElementTree as ET import json def xml_to_dict(element): result = {} # 处理元素属性 if element.attrib: result.update(element.attrib) # 遍历子元素 for child in element: child_result = xml_to_dict(child) if child.tag in result: # 同一标签重复出现时转为列表 if not isinstance(result[child.tag], list): result[child.tag] = [result[child.tag]] result[child.tag].append(child_result) else: result[child.tag] = child_result # 处理元素文本内容 if element.text and element.text.strip(): if result: result['text'] = element.text.strip() else: result = element.text.strip() return result # 解析真实的XML文件 tree = ET.parse('real_input.xml') root = tree.getroot() xml_dict = xml_to_dict(root) # 转换为JSON并输出 with open('output.json', 'w', encoding='utf-8') as f: json.dump(xml_dict, f, indent=4, ensure_ascii=False)
内容的提问来源于stack exchange,提问作者thanley
相关产品推荐
相关产品推荐

