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

时间:2018-01-23 04:41:07

标签: python json django python-2.7 django-1.11

我在我的Django项目中使用Nestable2插件来创建树。

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

Nestable2给我回JSON:

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

在Django视图中,我使用此JSON,但我想将其解析为id列表。例如:

[1, 2, 3, 4, 5, ...]

在我看来,我需要为此任务创建递归循环,所以我有点困惑。有人能说出完成这项任务的最佳方法吗?

views.py:

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

1 个答案:

答案 0 :(得分:1)

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

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
>>> get_ids(json_array)
[1, 2, 3, 4, 5]