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:
<('请输⼊json格式数据')
exit()
if isinstance(data, str):
try:
self.data = ast.literal_eval(data)
except:
<('请输⼊正确的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):
dswith("['%s']" % key):
result.append(path)
with open('', 'w+', encoding='utf-8') as f:
list(map(lambda line: f.write(line + '\r'), result))
return result
python json字符串转数组
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('', '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(ip[0]).get('msg')
取值得到的是unicode字符串
转换为字典可⽤eval()函数
data = ('result').get(ip[0]).get('msg'))
data = ('listen')
以上这篇Python查不限层级Json数据中某个key或者value的路径⽅式就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。