1 #!/usr/bin/python
2 #coding:utf-8
3
4 importjson5
6 defisjson(myjson):7 """判断是否为json对象"""
8 try:9 json_object =json.loads(myjson)10 exceptException as e:11 returnFalse12 returnTrue13
14
15 defget_target_value(key, dic, tmp_list):16 """
17 :param key: 目标key值18 :param dic: JSON数据19 :param tmp_list: 用于存储获取的数据20 :return: list21 """
22 if not isinstance(dic, dict) or not isinstance(tmp_list, list): #对传入数据进行格式校验
23 return 'argv[1] not an dict or argv[-1] not an list'
24
25 if key indic.keys():26 tmp_list.append(dic[key]) #传入数据存在则存入tmp_list
27 else:28 for value in dic.values(): #传入数据不符合则对其value值进行遍历
29 ifisinstance(value, dict):30 get_target_value(key, value, tmp_list) #传入数据的value值是字典,则直接调用自身
31 elifisinstance(value, (list, tuple)):32 _get_value(key, value, tmp_list) #传入数据的value值是列表或者元组,则调用_get_value
33 elifisjson(value):34 value1 =json.loads(value)35 get_target_value(key, value1, tmp_list) #传入数据的value值是json字符串,则装载成python对象,并调用自身
36 returntmp_list37
38
39 def_get_value(key, val, tmp_list):40 for val_ inval:41 ifisinstance(val_, dict):42 get_target_value(key, val_, tmp_list) #传入数据的value值是字典,则调用get_target_value
43 elifisinstance(val_, (list, tuple)):44 _get_value(key, val_, tmp_list) #传入数据的value值是列表或者元组,则调用自身
45 elifisjson(val_):46 value2 =json.loads(val_)47 get_target_value(key, value2, tmp_list) #传入数据的value值是json字符串,则装载成python对象,并调用get_target_value