关于json遍历,求python的算法高手

RiskerFalor 2015-06-04 03:55:01
在为公司写具体的接口测试。因为也没怎么用过框架所以就自己写了。python强大之处链接,伪装,获取都很简单。
我将服务器的url,每个接口名,每个headers,每个cookie都写入一个conf文件里面。读取并使用。

但是,在服务器拿到了json之后呢,要求我对其中部分字段进行验证。
可能验证的项目包括:
某个字段是否存在;
某个字段是否为某种长度;
某个字段是否为某几个特定的值;

但是json导入后是一个字典和列表来回嵌套一个字典(字典的键值对的值为列表,但是这个列表的每个元素都是字典)。

我如何找到N层底下的某个值进行验证呢?

我的计划是,在config文件留下这样一个字符串

[type],[value],[add]

是type,value,add,type是我要验证那种类型,是验证材质alive还是验证长度length还是验证特定值const 。value是对应的值。add是这个值的路径,比如下面我要找e就是a/b/e
{“a”:
{"b":[
{"c":"C"},
{"d":"D"},
{"e":"E"},
]}
}


但是有没有更好的方法。
而且绝大多数字段都要验证是否存在。可不可以写一个json摸版来验证呢?如何同步遍历两个结构一样的json呢。
...全文
4752 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
VxPython 2015-06-19
  • 打赏
  • 举报
回复
python 有解析json的库--json.使用方法也很简单的.
thomashtq 2015-06-19
  • 打赏
  • 举报
回复
类似于XML解释器的xpath,你可以参照类似的方法来解析 Json。
xiaohutushen30 2015-06-19
  • 打赏
  • 举报
回复
没忍住 自己实践了一把:
import json
src_str = '{"a":{"b":[{"c":"C"},{"d":"D"},{"e":"E"}]}}'
jdict = json.loads(src_str)
class FoundException(Exception): pass
global flag
flag =False
def check_key_value(jdict,key,value):
	global flag
	#import pdb;pdb.set_trace()
	if isinstance(jdict, list):
		for element in jdict:
			check_key_value(element,key,value)
	elif isinstance(jdict, dict):
		if key in jdict.keys():
			if jdict[key] == value:
				try:
					raise FoundException
				except FoundException, e:
					flag = True
			else:
				return False
		else:
			for x in jdict.keys():
				check_key_value(jdict[x],key,value)
check_key_value(jdict,"d","D")
print flag
xiaohutushen30 2015-06-19
  • 打赏
  • 举报
回复
[type],[value] 一个笨方法,写一个递归,递归的查找是不是有type这个属性,然后如果有这个属性,取这个属性的值,和value做对比,一致就验证通过,否则验证不通过。 如果数据比较大,或者包含的层次比较深,此方法效率不高。
屎克螂 2015-06-10
  • 打赏
  • 举报
回复
得自己写一套方法验证。 传递一个 验证模板给方法 模板大概是这个样子 [ {'key':'a', 'len':1, 'value_in':[1,2,3]} ]
黑泡泡选手 2015-06-04
  • 打赏
  • 举报
回复
可以采用递归生成器,逐层遍历,获取数值,你应该定义一个JSON结构,难道这个JSON的格式还会变化?

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧