最近项目中有一个小需求,查找json文件中某个关键或者价值的路径,所以就写了一个简单的小脚本,比较粗糙。
# !/usr/bin/env python3 # - * -编码:utf - 8 - * “‘ @author: funcups “‘ 从logzero导入日志记录器 进口ast 类HandleJson (): def __init__(自我、数据): 如果data=https://www.yisu.com/zixun/=没有: logger.error(“请输入json格式数据的) 退出() 如果isinstance(数据,str): 试一试: 自我。data=https://www.yisu.com/zixun/ast.literal_eval(数据) 除了: logger.error(“请输入正确的json格式数据的) 退出() dict elif isinstance(数据): 自我。data=https://www.yisu.com/zixun/data def __paths(自我、数据路径="): “‘ 用于遍历json树 :param数据:原始数据,或者主要对应的价值值 :param路径:关键值字符串,默认值为“ 返回: “‘ 如果isinstance(数据、dict类型): k、v data.items (): tmp=路径+”(“% s”)“% k 收益率(tmp, v) 从自我屈服。__paths (v, tmp) 如果isinstance(数据,列表): 对于k、v在列举(数据): tmp=路径+ % k [% d] 收益率(tmp, v) 从自我屈服。__paths (v, tmp) def find_key_path(自我,键): “‘ 查找关键路径 :param关键:需要查找路径的关键值 返回:包含关键值路径的列表 “‘ 结果=[] 对路径,价值self.__paths (self.data): 如果路径。endswith (“[' % s ']”%键): result.append(路径) 张开(“路径。txt”、“w +”,编码=皍tf - 8”)作为f: 列表(地图(λ:f。写(+ \ r的行),结果) 返回结果 def find_value_path(自我,键): “‘ 查找某个值的路径 :param关键:需要查找的值,限制为字符串,数字,浮点数、布尔值 返回: “‘ 结果=[] 对路径,价值self.__paths (self.data): 如果isinstance(价值,(str, int, bool,浮动)): 如果值=https://www.yisu.com/zixun/=键: result.append(路径) 张开(“路径。txt”、“w +”,编码=皍tf - 8”)作为f: 列表(地图(λ:f。写(+ \ r的行),结果) 返回结果 if __name__==癬_main__”: data=https://www.yisu.com/zixun/{“名称”:“funcups”} hj=HandleJson(数据) res=hj.find_key_path(名字) 打印(res) res=hj.find_value_path (“funcups”) 打印(res) >之前
获取到的json字符串,然后对其取值
{u 'result”: {u“10.10.10.100”: {u 'status: u 'OK, u 'msg”:“{“听”:{”:设置([]),“25”:设置([]),
" 引用>
“22”:设置([‘10.9.19.148’,‘10.10.10.1’,' 10.10.10.130 '])}}}}}data=https://www.yisu.com/zixun/result.get(结果). get (ip [0]) . get(味精)
引用>取值得到的是unicode字符串
转换为字典可用eval()函数
data=https://www.yisu.com/zixun/eval (result.get(结果). get (ip [0]) . get(味精))
引用>data=https://www.yisu.com/zixun/data.get(听)
引用>
以上这篇Python查找不限层级Json数据中某个关键或者价值的路径方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
Python查找不限层级Json数据中某个关键或者价值的路径方式