Python XML 转换为 JSON数据
Json标注格式
// bool:必须小写的true和false
{ "bool":true}
// null:必须小写的null
{ "object":null}
- JSON 规定字符集是UTF-8,字符串必须使用
""
,Object 的键也必须使用""
- 数组或对象的最后一个成员,不能加 逗号
数组方式 [ ]
对象方法 { }
XML解析转JSON
如何将JSON数据写入文件
- ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示
- indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json
- encoding:默认是UTF-8,设置json数据的编码方式
track的父节点是annotations
主要思路:把XML解析成Python对象,之后将其追加到列表或字典中,再用json.dump输出
import untangle
import os
import json
root_path = 'C:/Users/Desktop/Xml'
files = os.listdir(root_path)
for file in files:
output_dict = { }
num = 100
for i in range(num):
output_dict[i] = {
'frame':i,
'labels':[]
}
xml_path = os.path.join(root_path, file)
obj = untangle.parse(xml_path)
for track in obj.annotations.track:
for box in track.box:
box_json = { }
frame_number = int(box['frame'])
box_json['category'] = track['label']
box_json['box2d'] = {
'x1':float(box['xtl']),
'y1':float(box['ytl']),
'x2':float(box['xbr']),
'y2':float(box['ybr'])
}
output_dict[frame_number]['labels'].append(box_json)
output_list = []
for i in range(num):
output_list.append(output_dict[i])
output_path = os.path.join(root_path, file.split('.')[0] + '.json')
with open(output_path, 'w', encoding='utf-8') as outfile:
json.dump(output_list, outfile, ensure_ascii=False,indent=2)
还没有评论,来说两句吧...