【python处理excel教程实例 python解析json文件并提取】在测试工作中,通常都会接触到期望结果数据与实际结果数据一致性比对的测试场景,对于复杂、庞大数据的比对工作 。如果依靠人工执行,其成本相当高,难以保障执行结果的一致性(多次执行可能存在偏差),并且重复性极高 。因此,通常我们需要考虑如何通过自动化工具实现数据的比对 。
本文分享下如何实现Json、字典数据结构的递归解析 。
JSON的两种数据结构 1.Key-Value对集合,在Python语言中可以理解为字典(Dict),如下图 。
2.有序集合,在Python语言中可以理解为列表(List),如下图 。
代码示例 我们以下面这个较为复杂的Json为例 。
test_json = {"code": 200,"data": [{"apps": {"app_op_seq": [{"action": "点击","module_name": "聚划算","module_type": "resource"}]},"content": {"des": {"company_name": "耐克","intent": ["full"]},"rel": [{"des": {"person_name": "欧阳玖林","political_status": "金牌会员"},"ont": ["Company","Person"],"relIdx": [0,"8-9"],"relName": "欧阳","segs": ["耐克篮球鞋"]}],"segs": ["耐克篮球鞋"]},"content_op": "查询"}]}
实现源码 def json_generator(indict, key_value=https://www.haocat.cn/shenghuo/None):"""递归解析 Json 数据:param indict::param key_value::return:"""key_value = https://www.haocat.cn/shenghuo/key_value[:] if key_value else []if isinstance(indict, dict):for key, value in indict.items():tier = - 1if isinstance(value, dict) and value != {}:if len(value) == 0:yield key_value[key, ///'{}\\\']else:for d in json_generator(value, key_value[key]):yield delif isinstance(value, list) and value != []:if len(value) == 0:yield key_value[key, \\\'[]\\\']else:for v in value:tier = tier1for d in json_generator(v, key_value[key\\\'[{0}]\\\'.format(tier)]):yield delse:yield key_value[key, value]else:if not key_value:yield indictelse:yield key_value[indict]def structure_flow_sub(json_gen_obj):"""解析结果 格式化输出:param json_gen_obj::return: JsonPath:data[0].apps.app_op_seq[0].action"""structure = {}for i in json_generator(json_gen_obj):if \\\'.\\\'.join(i[:-1]) in structure.keys() and not isinstance(structure[\\\'.\\\'.join(i[:-1])], list):structure[\\\'.\\\'.join(i[:-1])] = [structure[\\\'.\\\'.join(i[:-1])]]structure[\\\'.\\\'.join(i[:-1])].append(i[-1])elif \\\'.\\\'.join(i[:-1]) in structure.keys() and isinstance(structure[\\\'.\\\'.join(i[:-1])], list):structure[\\\'.\\\'.join(i[:-1])].append(i[-1])else:structure[\\\'.\\\'.join(i[:-1])] = i[-1]return structuredef json_path_parse(json_gen_obj):"""Json路径解析:param json_gen_obj::return:"""structure_List = []if isinstance(json_gen_obj, dict):structure = structure_flow_sub(json_gen_obj)structure_List.append(structure)return structure_Listif isinstance(json_gen_obj, list):for i in json_gen_obj:result = structure_flow_sub(i)structure_List.append(result)return structure_Listif __name__ == \\\'__main__\\\':all_leaf_node_dict = json_path_parse(test_json)line_number = 0for k, v in all_leaf_node_dict[0].items():line_number= 1print("{line_number}JsonPath:{json_path}Value:{value} ".format(line_number=line_number, json_path=k, value=https://www.haocat.cn/shenghuo/v))
推荐阅读
- 祛除不锈钢除污垢的小妙招 不锈钢表面污渍处理最佳方法
- python网络爬虫技术 爬虫入门教程
- 高通骁龙和骁龙有什么区别 骁龙480处理器排名
- 两种处理器的优劣势 麒麟985和麒麟990哪个好
- 无信号原因及处理方法 有线电视无信号怎么调出来
- 手机处理器最新排行榜 手机处理器对比
- 彼岸花不长叶子怎么办 不长新叶处理方法
- 如何拆分出excel多个独立窗体 excel两个窗体分开显示的方法
- 跨境电商退货退款的方法有哪些 跨境电商退货退款如何处理
- 文竹根部长出的新苗怎样处理 文竹可以全剪了重新发枝吗