如何创建用于解析 json 的递归循环?
How create recursive loop for parsing the json?
我在我的 Django 项目中使用 Nestable2 插件来创建树。
当用户更改树节点的顺序时,插件 return 我 JSON 我通过 Ajax 发送到服务器。
Nestable2 return 我 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'})
如果我理解你的问题。这应该做你想做的。或者至少为您指明正确的方向。
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]
我在我的 Django 项目中使用 Nestable2 插件来创建树。
当用户更改树节点的顺序时,插件 return 我 JSON 我通过 Ajax 发送到服务器。
Nestable2 return 我 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'})
如果我理解你的问题。这应该做你想做的。或者至少为您指明正确的方向。
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]