Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建用于解析json的递归循环?_Python_Json_Django_Python 2.7_Django 1.11 - Fatal编程技术网

Python 如何创建用于解析json的递归循环?

Python 如何创建用于解析json的递归循环?,python,json,django,python-2.7,django-1.11,Python,Json,Django,Python 2.7,Django 1.11,我在Django项目中使用插件创建树 当用户更改树节点的顺序时,插件返回JSON,我通过Ajax发送给服务器 Nestable2返回我JSON: [{"id":1},{"id":2},{"id":3,"children":[{"id":4},{"id":5,"foo":"bar"}]}] 在Django视图中,我接受这个JSON,但我想将它解析为ID列表。例如: [1, 2, 3, 4, 5, ...] 在我看来,我需要为这个任务创建递归循环,所以我有点困惑。有人能说出完成这项任务的最佳方法

我在Django项目中使用插件创建树

当用户更改树节点的顺序时,插件返回JSON,我通过Ajax发送给服务器

Nestable2返回我JSON:

[{"id":1},{"id":2},{"id":3,"children":[{"id":4},{"id":5,"foo":"bar"}]}]
在Django视图中,我接受这个JSON,但我想将它解析为ID列表。例如:

[1, 2, 3, 4, 5, ...]
在我看来,我需要为这个任务创建递归循环,所以我有点困惑。有人能说出完成这项任务的最佳方法吗

视图。py:

class NodeOrderView(CsrfExemptMixin, JsonRequestResponseMixin, FormView):
    def post(self, request, *args, **kwargs):
        print(self.request_json)  # JSON
        return self.render_json_response({'saved': 'ok'})

如果我理解你的问题。这应该是你想要的。或者至少给你指出正确的方向

json_array = [{"id":1},{"id":2},{"id":3,"children":[{"id":4},{"id":5,"foo":"bar"}]}]

def get_ids(json_array):
    ids = []
    for obj in json_array:
        if isinstance(obj, dict):
            ids.append(obj.get('id'))
            children = obj.get('children', None)
            if children:
                ids.extend(get_ids(children))
        elif isinstance(obj, list):
            ids.extend(get_ids(obj))
    return ids


你到底想要什么还不太清楚。将
JSON
结构展平到每个元素的
id
?您好!:)这个问题看起来很简单,但我很困惑。在本文中,您可以看到我通过ajax发送到服务器的JSON示例。我想在我的
views.py
文件中从这个JSON创建ID列表。我希望用于其他目的的ID列表。谢谢你,兄弟!:)您的通用方法考虑了嵌套的不同深度。很好!没问题,小心点。我会适当地测试它,必要时调整它。你为什么害怕?你的意见会出什么问题?我使用不同级别的树嵌套进行了测试,它似乎很有效。例如,如果没有“children”属性,您可能会得到一个
KeyError
。或者特定对象的
id
标记为
something\u id
。或者嵌套大于递归限制。或者您的一个对象是
dict
list
的子类。可能会有很多错误。。。
>>> get_ids(json_array)
[1, 2, 3, 4, 5]