首页 > 其他分享 >递归获取嵌套json 的所有key及value值

递归获取嵌套json 的所有key及value值

时间:2023-07-31 18:47:34浏览次数:45  
标签:ana self value json dict str key name

import json

class Get_Dict_All_Keyvalue:
	""" 递归获取多维嵌套字典所有层级的key和value """
	def __init__(self, analysis_dict):
		#判断类型,如果是str的需要进行loads处理
		self.res_dict = {}
		
		self.key_name_set = set()
		#self.key_name_unique = True
		
		if isinstance(analysis_dict, dict):
			self.recur_dict(analysis_dict)
		if isinstance(analysis_dict, str):
			self.recur_dict(json.loads(analysis_dict))

	def recur_dict(self, ana_dict: dict, key_name=""):
		"""多维/嵌套字典数据无限遍历,获取所有key层和value"""
		# 使用isinstance检测数据类型:字典类型
		if isinstance(ana_dict, dict):
			for k, v in ana_dict.items():
				if key_name == "":
					self.recur_dict(v, k)
				else:
					self.recur_dict(v, key_name+f"_{k}")
		# 列表或元组类型
		elif isinstance(ana_dict, (list, tuple)):
			if len(ana_dict) == 1:
				for i in range(len(ana_dict)):
					# 自我调用实现无限遍历,单个不加修饰
					if isinstance(ana_dict[0], dict):
						self.recur_dict(ana_dict[i], key_name)
					else:
						print(key_name + "=" + str(ana_dict))
						self.res_dict[key_name] = str(ana_dict)
						break
			else:
				for i in range(len(ana_dict)):
					#判断下列表的元素是不是还是字典,如果是字典那就继续下钻,否则就是终端值
					if isinstance(ana_dict[0], dict):
						# 自我调用实现无限遍历,多个增加字母修饰
						self.recur_dict(ana_dict[i], key_name+f"_{i}")
					else:
						print(key_name + "=" + str(ana_dict))
						self.res_dict[key_name] = str(ana_dict)
						break
		else:
			print(key_name + "=" + str(ana_dict))
			self.res_dict[key_name] = str(ana_dict)
			
			last_key_name = key_name.split('_')[-1]
			
			if last_key_name not in self.key_name_set:
				self.key_name_set.add(last_key_name)
			else:
				print('重复key', last_key_name)
			
if __name__ == "__main__":
	test_dic = {"name": "zhangsan", "address": {"sheng": "beijing", "shiji": "beijing", "shiqu": ["shijingshan", "p"], "qu": {"1dong": "1", "2dong": "2"}}}
	
	t = Get_Dict_All_Keyvalue(test_dic)	# 传入空字典{},即ana_dicts初始值为{}
	print(t.res_dict)
	print(t.res_dict.keys())
	print(t.res_dict.values())

  

标签:ana,self,value,json,dict,str,key,name
From: https://www.cnblogs.com/hushaojun/p/17594189.html

相关文章

  • 基于端-边-云一体化架构的SkeyeVSS国标视频融合云平台在自助银行中的应用
    银行ATM功能的完善与升级,使得人们对ATM的依赖和使用度越来越高。然而ATM作为一个开放的公共环境,在服务应用中易造成各种异常情况及业务纠纷,一些不法分子也趁机利用ATM进行犯罪活动。而对于银行用户而言,提前预警、制止案件发生、避免人身、财产损失是对客户最基本的保护。如何保证AT......
  • MYSQL中JSON类型介绍
    1json对象的介绍在mysql未支持json数据类型时,我们通常使用varchar、blob或text的数据类型存储json字符串,对mysql来说,用户插入的数据只是序列化后的一个普通的字符串,不会对JSON文档本身的语法合法性做检查,文档的合法性需要用户自己保证。在使用时需要先将整个json对象从数据库读......
  • python 接口返回存储json字符串包含\n
    实现“python接口返回存储json字符串包含\n”的步骤为了实现接口返回存储包含特殊字符\n的JSON字符串,我们需要按照以下步骤进行操作:步骤描述1创建一个Python接口2生成包含特殊字符\n的JSON字符串3返回JSON字符串现在,让我们一步步实现这个过程。步骤1:创建......
  • python valueerror too many values to unpack
    解决"PythonValueError:toomanyvaluestounpack"错误简介在Python编程中,有时候我们会遇到"ValueError:toomanyvaluestounpack"的错误。这个错误通常发生在尝试将一个可迭代对象(如列表、元组或集合)的元素分配给多个变量时。本文将帮助刚入行的开发者解决这个错误,并提供......
  • BUUCTF Findkey
     对题目分析:if(Msg==517){if(strlen(String1)>6)//String位数小于等于6ExitProcess(0);if(strlen(String1)){memset(v17,0,sizeof(v17));v6=strlen(String1);memcpy(v17,......
  • 无涯教程-jQuery - css( name, value )方法函数
    css(name,value)方法将单个样式属性设置为所有匹配元素上的值。css(name,value)-语法selector.css(name,value)这是此方法使用的所有参数的描述-name  - 要设置的属性的名称。value   - 属性的值。css(name,value)-示例以下是一个简单的示......
  • AJAX--基于json格式的数据交换
    前端代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>获取信息列表</title>......
  • BGP中的preferred-value参数
    需求:1、AR4network发布一条路由2、AR1会从两个方向收到路由,如果我们改变选路,可以修改此参数实际配置:首先:抓出数据流ipip-prefix2index10permit100.1.1.132第二步:匹配数据route-policypre_valuepeimitnode10if-matchip-prefix2applypreferred-value2//可以取值0-65......
  • 写接口测试,遇到JSONDecodeError,要怎么解决?
     接口传参,deftest01_login_success(self):#账密登录data=json.dumps({"username":"5bz9aPaP5rkhXaSQlPsGpg==","password":"mxqZphA/vSH2MMdOP5kTSg=="}) 运行时发现接口报错:JSONDecodeError使用其他接口测试发现好像是传参加密解......
  • HuggingFace | config.json参数讲解
    在HuggingFace中,config.json文件是用于配置预训练模型参数的文件。这个文件通常包含了模型的架构、超参数和其他模型配置信息。它是一个JSON格式的文件,可以在加载模型时用来初始化模型的配置。在加载模型时,from_pretrained()方法通常会自动加载相应的config.json文件。例如,BertF......