python xpath方法解析json
2015-08-26 10:50
771 查看
现在移动互联网飞速发展,在测试过程中通常需要进行HTTP接口测试,而大多数http请求返回的是json数据。
然而python对josn数据的解析,就是对字典的解析,以下面这段json为例:
如果我们要获取sid中的数据,需要这样解析
第一种:jsonstr['head']['sid']
第二种:jsonstr.get('head').get('sid')
写完后发现这种方法是不是太low,而且当json层级太深时,代码可视性极差,而且难于维护。
json属于结构化数据,就像html一样,于是考虑到用xpath方法去解析。下面直接上代码:
然后测试一把
然而python对josn数据的解析,就是对字典的解析,以下面这段json为例:
{ "ver": "6.8", "dcid": "477", "head": { "cid": "", "ctok": "", "cver": "1.0", "lang": "01", "sid": "1", "syscode": "09", "auth": "", "extension": [] }, "contentType": "json" }
如果我们要获取sid中的数据,需要这样解析
第一种:jsonstr['head']['sid']
第二种:jsonstr.get('head').get('sid')
写完后发现这种方法是不是太low,而且当json层级太深时,代码可视性极差,而且难于维护。
json属于结构化数据,就像html一样,于是考虑到用xpath方法去解析。下面直接上代码:
import json import xmltodict # 解析json字符串 class jsonprase(object): def __init__(self, json_value): try: eval(json_value) self.json_value = json.loads(json_value) except Exception, e : raise ValueError('must be a json str value') def find_json_node_by_xpath(self, xpath): elem = self.json_value nodes = xpath.strip("/").split("/") for x in range(len(nodes)): try: elem = elem.get(nodes[x]) except AttributeError: elem = [y.get(nodes[x]) for y in elem] return elem def datalength(self, xpath="/"): return len(self.find_json_node_by_xpath(xpath)) @property def json_to_xml(self): try: root = {"root": self.json_value} xml = xmltodict.unparse(root, pretty=True) except ArithmeticError, e: pyapilog().error(e) return xml
然后测试一把
a ='''{ "ver": "6.8", "dcid": "477", "head": { "cid": "", "ctok": "", "cver": "1.0", "lang": "01", "sid": "1", "syscode": "09", "auth": "", "extension": [] }, "contentType": "json" }'''
print type(a)
d = jsonprase(a).find_json_node_by_xpath('/head/sid')
print d
相关文章推荐
- 机器学习--python归一化特征值
- run fastcgi python
- 《Python 3面向对象编程》试读笔记
- 机器学习常用Python扩展包
- python list set dic tuple总结及转换
- python 安装配置(windows)
- Python入门教程
- MySQL-python “error: command 'gcc' failed with exit status 1”错误
- Floyd算法的C&python实现及对比
- 简介二分查找算法与相关的Python实现示例
- python爬虫教程大全
- 编写地道的python(1)
- python操作Excel读写--使用xlrd
- Python介绍
- 用Python实现基本排序算法01——冒泡排序
- 【python】python实现栈
- python安装第三方库gevent
- subprocessing在python中的应用
- python_学习笔记0825
- python pickle函数应用