Python XML 转换为 JSON数据

一时失言乱红尘 2023-02-13 14:40 133阅读 0赞

Json标注格式

  1. // bool:必须小写的true和false
  2. { "bool":true}
  3. // null:必须小写的null
  4. { "object":null}
  • JSON 规定字符集是UTF-8,字符串必须使用"",Object 的键也必须使用""
  • 数组或对象的最后一个成员,不能加 逗号

数组方式 [ ]

对象方法 { }

json数据格式

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输出

  1. import untangle
  2. import os
  3. import json
  4. root_path = 'C:/Users/Desktop/Xml'
  5. files = os.listdir(root_path)
  6. for file in files:
  7. output_dict = { }
  8. num = 100
  9. for i in range(num):
  10. output_dict[i] = {
  11. 'frame':i,
  12. 'labels':[]
  13. }
  14. xml_path = os.path.join(root_path, file)
  15. obj = untangle.parse(xml_path)
  16. for track in obj.annotations.track:
  17. for box in track.box:
  18. box_json = { }
  19. frame_number = int(box['frame'])
  20. box_json['category'] = track['label']
  21. box_json['box2d'] = {
  22. 'x1':float(box['xtl']),
  23. 'y1':float(box['ytl']),
  24. 'x2':float(box['xbr']),
  25. 'y2':float(box['ybr'])
  26. }
  27. output_dict[frame_number]['labels'].append(box_json)
  28. output_list = []
  29. for i in range(num):
  30. output_list.append(output_dict[i])
  31. output_path = os.path.join(root_path, file.split('.')[0] + '.json')
  32. with open(output_path, 'w', encoding='utf-8') as outfile:
  33. json.dump(output_list, outfile, ensure_ascii=False,indent=2)

frame

发表评论

表情:
评论列表 (有 0 条评论,133人围观)

还没有评论,来说两句吧...

相关阅读