用Python代码将XML转为JSON(或dict,字典)
1.下面的Python代码将任意XML格式文件转化为JSON格式(字典)。除Python自带的模块外,不需要依赖其他任何第三方库。
2.XML文件的读取使用Python自带的XML模块。
3.关键代码如下:
1 import xml.etree.ElementTree as ET 2 import json 3 4 def xml2json(node): 5 if not isinstance(node, ET.Element): 6 raise Exception("node format error.") 7 8 if len(node) == 0: 9 return node.tag, node.text 10 11 data = {} 12 temp = None 13 for child in node: 14 key, val = xml2json(child) 15 if key in data: 16 if type(data[key]) == list: 17 data[key].append(val) 18 else: 19 temp = data[key] 20 data[key] = [temp, val] 21 else: 22 data[key] = val 23 24 return node.tag, data
4.测试代码如下:
1 def main(): 2 path = "./temp.xml" 3 tree = ET.parse(path) 4 node = tree.getroot() 5 tag, data = xml2json(node) 6 7 f = open("./temp.json", "w", encoding="utf-8") 8 f.write(json.dumps(data, ensure_ascii=False, indent=4)) 9 f.close()
5.结果如下:
(1)原XML文件:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <观测区域> 3 <坐标列表> 4 <坐标> 5 <经度>76.940</经度> 6 <纬度>-77.21</纬度> 7 </坐标> 8 <坐标> 9 <经度>81.7</经度> 10 <纬度>-76.4</纬度> 11 </坐标> 12 <坐标> 13 <经度>64</经度> 14 <纬度>-66</纬度> 15 </坐标> 16 <坐标> 17 <经度>63.5</经度> 18 <纬度>-65.3</纬度> 19 </坐标> 20 <坐标> 21 <经度>60.8</经度> 22 <纬度>-66.4</纬度> 23 </坐标> 24 <坐标> 25 <经度>60.2</经度> 26 <纬度>-66.3</纬度> 27 </坐标> 28 <坐标> 29 <经度>76.4</经度> 30 <纬度>-77.2</纬度> 31 </坐标> 32 </坐标列表> 33 <名称>普通观测</名称> 34 </观测区域>
(2)转换后的JSON文件:
1 { 2 "坐标列表": { 3 "坐标": [ 4 { 5 "经度": "76.940", 6 "纬度": "-77.21" 7 }, 8 { 9 "经度": "81.7", 10 "纬度": "-76.4" 11 }, 12 { 13 "经度": "64", 14 "纬度": "-66" 15 }, 16 { 17 "经度": "63.5", 18 "纬度": "-65.3" 19 }, 20 { 21 "经度": "60.8", 22 "纬度": "-66.4" 23 }, 24 { 25 "经度": "60.2", 26 "纬度": "-66.3" 27 }, 28 { 29 "经度": "76.4", 30 "纬度": "-77.2" 31 } 32 ] 33 }, 34 "名称": "普通观测" 35 }