Python什么方法可以将XML转换为JSON格式,pythonjson,由于老系统用的XML格式
Python什么方法可以将XML转换为JSON格式,pythonjson,由于老系统用的XML格式
由于老系统用的XML格式作为接口,而我的程序需要将这部分xml转换成json再使用。一头雾水,希望大家能给个思路。
<student> <stid>10213</stid> <info> <name>name</name> <mail>xxx@xxx.com</mail> <sex>male</sex> </info> <course> <name>math</name> <score>90</age> </course> <course> <name>english</name> <score>88</age> </course> ...</student>
转成类似下面这种:
{ "student": ... ...}
将xml转成dict以后,再用json.dumps输出就行了。
#! /usr/bin/env python# -*- coding:utf-8 -*-from xml.parsers.expat import ParserCreatetry: import jsonexcept: import simplejson as jsonclass Xml2Json: LIST_TAGS = ['COMMANDS'] def __init__(self, data = None): self._parser = ParserCreate() self._parser.StartElementHandler = self.start self._parser.EndElementHandler = self.end self._parser.CharacterDataHandler = self.data self.result = None if data: self.feed(data) self.close() def feed(self, data): self._stack = [] self._data = '' self._parser.Parse(data, 0) def close(self): self._parser.Parse("", 1) del self._parser def start(self, tag, attrs): assert attrs == {} assert self._data.strip() == '' self._stack.append([tag]) self._data = '' def end(self, tag): last_tag = self._stack.pop() assert last_tag[0] == tag if len(last_tag) == 1: #leaf data = self._data else: if tag not in Xml2Json.LIST_TAGS: # build a dict, repeating pairs get pushed into lists data = {} for k, v in last_tag[1:]: if k not in data: data[k] = v else: el = data[k] if type(el) is not list: data[k] = [el, v] else: el.append(v) else: #force into a list data = [{k:v} for k, v in last_tag[1:]] if self._stack: self._stack[-1].append((tag, data)) else: self.result = {tag:data} self._data = '' def data(self, data): self._data = dataif __name__ == '__main__': xml = """<student> <stid>10213</stid> <info> <name>name</name> <mail>xxx@xxx.com</mail> <sex>male</sex> </info> <course> <name>math</name> <age>90</age> </course> <course> <name>english</name> <age>88</age> </course></student>""" result = Xml2Json(xml).result; print(result) print("*" * 80) print(result['student']['stid']) print("*" * 80) print(json.dumps(result))
话说,老兄,那个你给的 xml bug 一大堆啊
编橙之家文章,
相关内容
- Python mysql数据牗executemany指定写入表报错,pythonexecute
- python3一当前函数调用另一个函数中的数据怎么实现,
- python import模块导入ImportError: No module named A路径应该没问
- 请问python 中cx_oracle使用where col in (:1)的方式的时候,是
- Flask Web开发实例3-10怎么样来实现?,flask3-10,Windows环境
- Python方法获得系统CPU频率及内存占用情况,python内存占
- Python七牛可以成功上传却不能正常访问文件如何解决,
- 使用python统计目标词在文件中出频度的实现方法,pyt
- Python中像__xxx__是做什么用的?,Python__xxx__,看一些源代码
- Python redis库连接池参数怎么用呢?,pythonredis,redis库的
评论关闭