打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python实现递归解析json

        在日常自动化测试中,json解析是经常要做的事情。但是有的json格式嵌套复杂,如果按照顺序解析的方法,需要写非常冗长的if判断,有以下几个缺点:1、无复用性:对于其他json格式或者当前格式稍微修改,就需要再写一套;2、健壮性差:冗长的判断极易写错。

        下面是一个原始json串和经过json解析工具(http://app.baidu.com/app/enter?appid=159018)处理的json串:

{"b":{"a":[{"n1":"WIFI","lo":116.30744414106923,"t2":"1387873418.195T+08:00","t3":"target_首页-海报视频点击","p1":"com.tudou.ui.activity.HomeActivity","n2":840,"la":39.98049465154441,"l":false},{"n1":"WIFI","lo":116.30744414106923,"t2":"1387873415.880T+08:00","t1":"A1005","s1":"5da19f89080af666bc2cb8d8775706df","p1":"com.tudou.ui.activity.HomeActivity"}]},"h":{"i":{"o2":"4.3","o1":"Android","b2":"Nexus 7","m":"10:bf:48:c2:81:f5","h":1205,"w":800,"u":"f835c7f8-c331-4b47-a6a3-772021544aa9","b1":"google"}}}

{	"b":{		"a":[			{				"n1":"WIFI",				"lo":116.30744414106923,				"t2":"1387873418.195T+08:00",				"t3":"target_首页-海报视频点击",				"p1":"com.tudou.ui.activity.HomeActivity",				"n2":840,				"la":39.98049465154441,				"l":false			},			{				"n1":"WIFI",				"lo":116.30744414106923,				"t2":"1387873415.880T+08:00",				"t1":"A1005",				"s1":"5da19f89080af666bc2cb8d8775706df",				"p1":"com.tudou.ui.activity.HomeActivity"			}		]	},	"h":{		"i":{			"o2":"4.3",			"o1":"Android",			"b2":"Nexus 7",			"m":"10:bf:48:c2:81:f5",			"h":1205,			"w":800,			"u":"f835c7f8-c331-4b47-a6a3-772021544aa9",			"b1":"google"		}	}}

        仔细分析下json格式,无外乎就是字典套列表,列表套字典,层层嵌套,可以用递归实现。

    def print_keyvalue_all(self,input_json):        key_value=''        if isinstance(input_json,dict):            for key in input_json.keys():                key_value = input_json.get(key)                if isinstance(key_value,dict):                    self.print_keyvalue_all(key_value)                elif isinstance(key_value,list):                    for json_array in key_value:                        self.print_keyvalue_all(json_array)                else:                    print str(key)+" = "+str(key_value)        elif isinstance(input_json,list):            for input_json_array in input_json:                self.print_keyvalue_all(input_json_array)

        需要注意的是isinstance内置函数的使用,判断当前对象是列表还是字典,非常简洁。

        下面是输出结果:

u = f835c7f8-c331-4b47-a6a3-772021544aa9w = 800b2 = Nexus 7h = 1205m = 10:bf:48:c2:81:f5o2 = 4.3o1 = Androidb1 = googlep1 = com.tudou.ui.activity.HomeActivitylo = 116.307444141n1 = WIFIn2 = 840la = 39.9804946515t2 = 1387873418.195T+08:00t3 = target_首页-海报视频点击l = Falsep1 = com.tudou.ui.activity.HomeActivitylo = 116.307444141s1 = 5da19f89080af666bc2cb8d8775706dft2 = 1387873415.880T+08:00t1 = A1005n1 = WIFI

        下面是给定key,输出value的递归实现。

    def print_keyvalue_by_key(self,input_json,key):        key_value=''        if isinstance(input_json,dict):            for json_result in input_json.values():                if key in input_json.keys():                    key_value = input_json.get(key)                else:                    self.print_keyvalue_by_key(json_result,key)        elif isinstance(input_json,list):            for json_array in input_json:                self.print_keyvalue_by_key(json_array,key)        if key_value!='':            print str(key)+" = "+str(key_value)


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
linux 下如何通过软件模拟按键[转
对象(数组)的深克隆和浅克隆(头条)
JSON对象遍历
JS使用递归遍历json对象进行操作
前端【JS】,深拷贝与浅拷贝的区别及详解!
用Python快速从深层嵌套 JSON 中找到特定的 Key
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服