Python查找不限层级Json数据中某个key或者value的路径方式


Posted in Python onFebruary 27, 2020

最近项目中有一个小需求,查找json文件中某个key或者value的路径,所以就写了一个简单的小脚本,比较粗糙。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
@author: funcups
'''
from logzero import logger
import ast
 
class HandleJson():
  def __init__(self, data):
    if data == None:
      logger.error('请输入json格式数据')
      exit()
 
    if isinstance(data, str):
      try:
        self.data = ast.literal_eval(data)
      except:
        logger.error('请输入正确的json格式数据')
        exit()
    elif isinstance(data, dict):
      self.data = data
 
  def __paths(self, data, path=''):
    '''
    用于遍历json树
    :param data: 原始数据,或者key对应的value值
    :param path: key值字符串,默认值为''
    :return:
    '''
    if isinstance(data, dict):
      for k, v in data.items():
        tmp = path + "['%s']" % k
        yield (tmp, v)
        yield from self.__paths(v, tmp)
 
    if isinstance(data, list):
      for k, v in enumerate(data):
        tmp = path + '[%d]' % k
        yield (tmp, v)
        yield from self.__paths(v, tmp)
 
  def find_key_path(self, key):
    '''
    查找key路径
    :param key: 需要查找路径的key值
    :return: 包含key值路径的list
    '''
    result = []
    for path,value in self.__paths(self.data):
      if path.endswith("['%s']" % key):
        result.append(path)
    with open('path.txt', 'w+', encoding='utf-8') as f:
      list(map(lambda line: f.write(line + '\r'), result))
    return result
 
  def find_value_path(self, key):
    '''
    查找某个值的路径
    :param key: 需要查找的值,限制为字符串,数字,浮点数,布尔值
    :return:
    '''
    result = []
    for path, value in self.__paths(self.data):
      if isinstance(value, (str, int, bool, float)):
        if value == key:
          result.append(path)
    with open('path.txt', 'w+', encoding='utf-8') as f:
      list(map(lambda line: f.write(line + '\r'), result))
    return result
 
if __name__ == '__main__':
  data = {'name': 'funcups'}
  hj = HandleJson(data)
  res = hj.find_key_path('name')
  print(res)
 
  res = hj.find_value_path('funcups')
  print(res)

补充拓展:python 获取的json字符串取值

获取到的json字符串,然后对其取值

{u'result': {u'10.10.10.100': {u'status': u'OK', u'msg': u"{'listen': {'': set([]), '25': set([]),
'22': set(['10.9.19.148', '10.10.10.1', '10.10.10.130'])}}"}}}

data = result.get('result').get(ip[0]).get('msg')

取值得到的是unicode字符串

转换为字典 可用eval()函数

data = eval(result.get('result').get(ip[0]).get('msg'))

data = data.get('listen')

以上这篇Python查找不限层级Json数据中某个key或者value的路径方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
Python读取网页内容的方法
Jul 30 Python
python开发之基于thread线程搜索本地文件的方法
Nov 11 Python
小议Python中自定义函数的可变参数的使用及注意点
Jun 21 Python
Python实现的生成格雷码功能示例
Jan 24 Python
[原创]Python入门教程4. 元组基本操作
Oct 31 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
tensorflow 模型权重导出实例
Jan 24 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
Python自动巡检H3C交换机实现过程解析
Aug 14 Python
运行Python编写的程序方法实例
Oct 21 Python
python中opencv实现图片文本倾斜校正
Jun 11 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 #Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 #Python
Python 格式化打印json数据方法(展开状态)
Feb 27 #Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 #Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 #Python
python json 递归打印所有json子节点信息的例子
Feb 27 #Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 #Python
You might like
php用正则表达式匹配中文实例详解
2013/11/06 PHP
php猜单词游戏
2015/09/29 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
js获取变量
2006/08/24 Javascript
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
详解微信UnionID作用
2019/05/15 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python文件夹与文件的操作实现代码
2014/07/13 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python去除字符串中的换行符
2017/10/11 Python
python表格存取的方法
2018/03/07 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
Python流程控制 while循环实现解析
2019/09/02 Python
基于Python实现简单学生管理系统
2020/07/24 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
Linux机考试题
2015/07/17 面试题
甜品店的创业计划书范文
2014/01/02 职场文书
表彰大会主持词
2014/03/26 职场文书
党员自我剖析材料
2014/08/31 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
教育见习报告范文
2014/11/03 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书