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

最近项目中有一个小需求,查找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的路径方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python实现提取str字符串/json中多级目录下的某个值

    字符串多级目录取值: 比如说: 你response接收到的数据是这样的. 你现在只需要取到itemstring 这个字段下的值.其他的都不要! 思路就是:字符串是个json格式(或转为json格式),然后str转为字典dict,然后循环遍历按照key来取值. 你的data是个字典 然后item_list是data的Key ,item_list是个数组,这个里面的数组中的每个元素都是一个字典. 因此就是dict多级路径按key取值. # 多级目录提取-dict print(type(respons

  • 详解在Python中以绝对路径或者相对路径导入文件的方法

    1.在Python中以相对路径或者绝对路径来导入文件或者模块的方法 今天在调试代码的时候,程序一直提示没有该模块,一直很纳闷,因为我导入文件一直是用绝对路径进行导入的.按道理来讲是不会出现模块找不到的情况的. 最后仔细分析了整个代码的目录结构,才发现了问题. 下面依次来说明一下今天的情况 先看导入的代码: 在demo--mnist.py文件中执行以下两种导入操作 # 第一处 from gcforest.gcforest import GCForest from gcforest.utils.co

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

    最近项目中有一个小需求,查找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

  • js如何查找json数据中的最大值和最小值方法

    目录 js查找json数据中的最大值和最小值 使用Math对象来获取最大值和最小值 使用for循环来获取最大值和最小值 获取最大值和最小值返回对应的json数据 用reduce()获取JSON中某个字段值最大的项 需求 语法 返回值 回调函数语法 总结 js查找json数据中的最大值和最小值 js操作数组的方式有很多种,查找json数据中的最大值和最小值也是经常用到,那么接下来就介绍2种方式来实现. 先准备好json数据,根据数组中的age值比较大小: var array = [     {na

  • jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析

    本文实例讲述了jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="h

  • Python如何读取、写入JSON数据

    问题 你想读写JSON(JavaScript Object Notation)编码格式的数据. 解决方案 json 模块提供了一种很简单的方式来编码和解码JSON数据.其中两个主要的函数是 json.dumps() 和 json.loads() ,要比其他序列化函数库如pickle的接口少得多.下面演示如何将一个Python数据结构转换为JSON: import json data = { 'name' : 'ACME', 'shares' : 100, 'price' : 542.23 } j

  • JS中如何判断传过来的JSON数据中是否存在某字段

    如何判断传过来的JSON数据中,某个字段是否存在, 1.obj["key"] != undefined 这种有缺陷,如果这个key定义了,并且就是很2的赋值为undefined,那么这句就会出问题了. 2.!("key" in obj) 3.obj.hasOwnProperty("key") 这两种方法就比较好了,推荐使用. 答案原文: Actually, checking for undefined-ness is not an accurat

  • JSON数据中存在单个转义字符“\”的处理方法

    1.反斜杠(又称右斜杠"\"),还表示转义字符,字符串中不能成单出现: 斜杠(又称左斜杠"/") 例如,在Android中定义字符串时: 2.若JSON数据中存在奇数个反斜杠时后台又不做处理的前提下,移动端可以过滤该特殊字符: 第一步:构建工具类: public class JSONEncodeUtil { /** * 将奇数个转义字符变为偶数个 * @param s * @return */ public static String getDecodeJSONSt

  • python使用response.read()接收json数据的实例

    如下所示: import json result = response.read() result.decode('utf-8') jsonData = json.loads(result) 以上这篇python使用response.read()接收json数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • js根据json数据中的某一个属性来给数据分组的方法

    如下所示: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <span id ="span" style="width: 50px;height: 200px;"></span> </body> &

  • python 检查数据中是否有缺失值,删除缺失值的方式

    # 检查数据中是否有缺失值 np.isnan(train).any() Flase:表示对应特征的特征值中无缺失值 True:表示有缺失值 通常情况下删除行,使用参数axis = 0,删除列的参数axis = 1,通常不会这么做,那样会删除一个变量. print(df.dropna(axis = 0)) 以上这篇python 检查数据中是否有缺失值,删除缺失值的方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 在js与java中判断json数据中是否含有某字段的案例

    js中 从服务端传过来一个json数据为data 1.data["key"] != undefined //这种有缺陷,如果这个key定义了,并且就是很2的赋值为undefined,那么这句就会出问题了 2.!("data" in obj) 3.data.hasOwnProperty("key") //后面两种推荐使用 java程序中判断是否存在 data 为从浏览器传回来的json数据 当读取数据的时候最好先加一个判断,不然如果里面不含有该数据

随机推荐