如何将带层级字符串的列表拆分为嵌套子列表并转为JSON?
实现层级字符串转嵌套列表并生成JSON的方案
我来给你详细说下怎么实现这个需求,用Python就能轻松搞定,分几步走:
核心思路
首先,我们可以先用字典来临时构建层级结构(字典的键值对特性能让我们快速查找和创建层级),之后再把字典转换成你需要的嵌套列表格式,最后直接生成JSON字符串。
完整代码实现
import json def build_nested_structure(input_data): # 用字典暂存层级结构,方便快速定位 root_dict = {} for path_str, value in input_data: # 把点分隔的路径拆分成层级列表 path_parts = path_str.split('.') current_level = root_dict # 遍历除最后一层外的所有层级,逐层创建子结构 for part in path_parts[:-1]: if part not in current_level: current_level[part] = {} current_level = current_level[part] # 给最后一层赋值 current_level[path_parts[-1]] = value # 递归把字典转换成要求的嵌套列表格式 def dict_to_nested_list(node): nested_list = [] for key, val in node.items(): if isinstance(val, dict): # 如果是子层级,继续递归转换 nested_list.append([key, dict_to_nested_list(val)]) else: # 叶子节点直接生成[key, value]对 nested_list.append([key, val]) return nested_list # 转换为目标嵌套列表 nested_result = dict_to_nested_list(root_dict) return nested_result # 你的输入列表 input_list = [['cat1.subcat1.item1', 0], ['cat1.subcat1.item2', 'hello'], ['cat1.subcat2.item1', 1337], ['cat2.item1', 'test']] # 生成嵌套列表 nested_list = build_nested_structure(input_list) print("生成的嵌套列表:") print(nested_list) # 直接生成JSON字符串 json_result = json.dumps(nested_list, indent=2) print("\n生成的JSON字符串:") print(json_result)
代码解释
构建层级字典:
- 遍历每个输入条目,用
split('.')把路径字符串拆分成层级数组(比如'cat1.subcat1.item1'变成['cat1', 'subcat1', 'item1']) - 从根字典开始,逐层检查并创建子字典,直到到达倒数第二层,然后把最后一层的键和对应的值关联起来
- 遍历每个输入条目,用
字典转嵌套列表:
- 用递归函数
dict_to_nested_list把字典的键值对转换成[key, 子列表/值]的格式,如果值还是字典(代表有子层级),就继续递归转换
- 用递归函数
生成JSON字符串:
- 用
json.dumps()直接把嵌套列表转换成JSON字符串,indent=2是为了生成格式化的易读JSON,不需要的话可以去掉这个参数生成紧凑的字符串
- 用
输出结果
运行代码后,生成的嵌套列表和你要求的完全一致:
[['cat1', [['subcat1', [['item1', 0], ['item2', 'hello']]], ['subcat2', [['item1', 1337]]]]], ['cat2', [['item1', 'test']]]]
对应的JSON字符串:
[ [ "cat1", [ [ "subcat1", [ [ "item1", 0 ], [ "item2", "hello" ] ] ], [ "subcat2", [ [ "item1", 1337 ] ] ] ] ], [ "cat2", [ [ "item1", "test" ] ] ] ]
内容的提问来源于stack exchange,提问作者MartiniMoe
相关产品推荐
相关产品推荐

