当前位置: 首页 > 面试题库 >

通过嵌套json为python中的特定键进行递归迭代

阎麒
2023-03-14
问题内容
我正在尝试从json文件中提取嵌套值。我想打印出每个“
id”键的每个值。我想我已经接近了,但无法弄清楚为什么obj类型从字典更改为列表,然后为什么我无法解析该列表。这是我正在使用的json的链接: http
//hastebin.com/ratevimixa.tex

这是我当前的代码:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import json

json_data = open('JubJubProductions.json', 'r+')
jdata = json.loads(json_data.read().decode("utf-8"))

def recursion(dict):

    for key, value in dict.items():

        if type(value) == type(dict):
            if key != "paging":
                for key, value in value.items():
                    if isinstance (value,list):
                        print key
                        # place where I need to enter list comprehension?
                if type(value) == type(dict):
                    if key == "id":
                        print " id found " + value
                    if key != "id":
                        print key + " 1st level"
                if key == "id":
                    print key
        else:
            if key == "id":
                print "id found " + value       
if __name__ == '__main__':
    recursion(jdata)

--------------------------------------------------

----------------------------------------- 更新

现在,我正在使用它,它将返回一个id值,但不是全部:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import json

json_data = open('jubjubProductions', 'r+')
jdata = json.loads(json_data.read().decode("utf-8"))

def id_generator(d):
    for k, v in d.items():
        if k == "id":
            yield v
        elif isinstance(v, dict):
            for id_val in id_generator(v):
                yield id_val

if __name__ == '__main__':
    for _ in id_generator(jdata):
        print (_)

问题答案:
def id_generator(dict_var):
    for k, v in dict_var.items():
        if k == "id":
            yield v
        elif isinstance(v, dict):
            for id_val in id_generator(v):
                yield id_val

这将创建一个迭代器,该迭代器将生成键“ id”下任意级别的每个值。用法示例(打印所有这些值):

for _ in id_generator(some_json_dict):
    print(_)


 类似资料:
  • 我有我的json数据来自DB,但是列名可能因不同的项目而异,我需要使用angularjs在表中显示它,我如何使用ng-重复使用另一个ng-重复键迭代json数据。 例如 现在在渲染的时候,我不知道json数据中的键,但是我可以传递一组键,比如 现在,我想使用每个键,并在HTML上呈现,请帮助 我试过这样的方法,但没有用。

  • 问题内容: 我有一个类似于以下内容的JSON字符串: 我对此字符串进行了JSON解析,然后将所有对象转换为HashMaps,并将所有数组转换为HashMap [] s。我的问题是我需要一个递归函数来遍历Java中此JSON结构的所有节点。我怎样才能做到这一点?我在想类似的东西: 问题答案: 假设一个数组只能在内部包含Maps(而不是其他数组): 或者,如果您可以使用3个功能,则可以使其更简单

  • 问题内容: 我正在使用有角JS及其示例之一:http : //jsfiddle.net/furf/EJGHX/ 在发送更新功能之前,我需要获取数据并向其中添加一些值。(如果用angular而不是js更好,请告诉我) 我正在尝试获取“父代”和“索引”并更新子代。 这是我正在遍历的数据 这就是我目前正在遍历的方式,但是它只能得到第一个维度 我在另一个小提琴上找到了这个,但我不知道该如何抓取父对象或索引

  • 我正在尝试创建一个递归函数,该函数将生成项的嵌套结构。此文件中的每个项都有一个指向其子项的指针和一个停止值,如您可以在下面看到的: 这个递归函数应该获得一个开始索引,它将根据该索引构建树,并返回一个嵌套的字典,如下所示:

  • 我想在一个带有递归的Javascript嵌套对象中找到一个值的键。 下面是我对函数的尝试。有没有更优雅的方法来实现这一点? null null 例如,有没有一种方法可以避免检查的值然后中断?我觉得result应该能够在调用堆栈中冒泡,直到它在第一次函数调用时返回,而不必中断。

  • 问题内容: 有一个像这样的json: 如何在不迭代所有json的情况下找到all 的值? PS:可以在json中的任何位置。 如果没有方法可以做到这一点,您能告诉我如何遍历json吗? 问题答案: 我对这个问题的处理方式会有所不同。 由于JSON不允许深度优先搜索,因此将json转换为Python对象,将其提供给XML解码器,然后提取要搜索的Node