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字符串替换的2种方法
Nov 30 Python
详细解析Python中的变量的数据类型
May 13 Python
Python对列表排序的方法实例分析
May 16 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
OpenCV+python手势识别框架和实例讲解
Aug 03 Python
Python中的Numpy矩阵操作
Aug 12 Python
用python实现刷点击率的示例代码
Feb 21 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
python中pdb模块实例用法
Jan 15 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
linux php mysql数据库备份实现代码
2009/03/10 PHP
PHP原理之异常机制深入分析
2010/08/08 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
javascript 动态加载 css 方法总结
2009/07/11 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
Python函数的周期性执行实现方法
2016/08/13 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
使用python3实现操作串口详解
2019/01/01 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
给老师的一封建议书
2014/03/13 职场文书
财务负责人岗位职责
2015/02/03 职场文书
师德师风个人总结
2015/02/06 职场文书
婚宴父亲致辞
2015/07/27 职场文书
《灰雀》教学反思
2016/02/19 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python