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格式化压缩后的JS文件的方法
Mar 05 Python
python 匹配url中是否存在IP地址的方法
Jun 04 Python
基于Python List的赋值方法
Jun 23 Python
Python机器学习库scikit-learn安装与基本使用教程
Jun 25 Python
对django layer弹窗组件的使用详解
Aug 31 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
Django 用户登陆访问限制实例 @login_required
May 13 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
15个Pythonic的代码示例(值得收藏)
Oct 29 Python
pycharm 复制代码出现空格的解决方式
Jan 15 Python
PyQt5通过信号实现MVC的示例
Feb 06 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 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和ACCESS写聊天室(三)
2006/10/09 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
vue多种弹框的弹出形式的示例代码
2017/09/18 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
js实现移动端轮播图
2020/12/21 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
Python 不同对象比较大小示例探讨
2014/08/21 Python
详细探究Python中的字典容器
2015/04/14 Python
解析Python中while true的使用
2015/10/13 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
2014年节能降耗工作总结
2014/12/11 职场文书
2014年教研员工作总结
2014/12/23 职场文书
项目投资意向书范本
2015/05/09 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书