91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python查找不限層級Json數據中某個key或者value的路徑方式

發布時間:2020-09-24 13:16:08 來源:腳本之家 閱讀:357 作者:funcups 欄目:開發技術

最近項目中有一個小需求,查找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的路徑方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尉犁县| 五莲县| 镶黄旗| 稻城县| 遂溪县| 兴宁市| 衢州市| 阿鲁科尔沁旗| 肃宁县| 昭通市| 五华县| 东城区| 驻马店市| 怀集县| 亚东县| 竹北市| 即墨市| 望谟县| 英吉沙县| 江永县| 乌鲁木齐县| 前郭尔| 康保县| 泰宁县| 潜山县| 南江县| 江永县| 新丰县| 普兰店市| 九寨沟县| 韶山市| 民县| 宝应县| 襄垣县| 射阳县| 成安县| 德钦县| 阳信县| 中西区| 闸北区| 巩义市|