Python技术求助:实现空白行分隔的多组键值对转为独立JSON对象
解决按空白行分隔的键值对转JSON数组问题
我明白你想要的效果:把文本中每一组由空白行分隔的键值对,分别转换成独立的JSON对象,最终组成一个JSON数组。咱们来看看你的代码问题出在哪,以及怎么修正。
原代码的问题分析
你的代码现在是逐行处理文本,但每次循环都把单独一行转成一个字典对象,这就导致每个键值对都是数组里的一个单独元素,而不是把同一组的键值对合并成一个对象。另外,遇到空白行时只是continue跳过,并没有触发“结束当前组、开始新组”的逻辑——因为你根本没在维护一个“当前组”的字典。
修正后的代码方案
我们可以先把整个文本按空白行分割成多个组,再逐个处理每个组里的键值对,这样就能自然实现分组效果:
#!/usr/bin/python import json # 读取文件内容,统一处理换行符(兼容Windows/Linux) with open("sample.txt", "r") as f: content = f.read().replace('\r\n', '\n') # 按空白行分割成多个组,同时过滤掉可能的空组(比如文件首尾的空白行) groups = [group.strip() for group in content.split('\n\n') if group.strip()] result = [] for group in groups: # 把当前组的每行分割成键值对,组装成字典 group_dict = {} for line in group.split('\n'): # 跳过组内可能的空行(如果有的话) if not line.strip(): continue key, value = line.split(': ', 1) group_dict[key] = value result.append(group_dict) # 写入JSON文件 with open("dump.json", 'w') as file: json.dump(result, file, indent=4, sort_keys=False)
代码解释
- 读取并统一换行符:用
replace('\r\n', '\n')处理Windows系统的换行符,避免分割时出现问题。 - 分割成组:
content.split('\n\n')直接把文本按空白行拆分成各个键值对组,再用列表推导式过滤掉空的组(比如文件开头/结尾的空白行)。 - 处理每个组:对每个组,初始化一个空字典
group_dict,遍历组内的每一行,分割键值对并添加到字典中,最后把这个字典加入结果列表。 - 写入JSON:用
json.dump()直接写入文件,比先转成字符串再写更高效。
测试效果
用你提供的示例数据,运行后dump.json的内容会是:
[ { "key1": "value1", "key2": "value2", "key3": "value3" }, { "key1": "value4", "key2": "value5", "key3": "value6" } ]
完全符合你的预期需求。
内容的提问来源于stack exchange,提问作者DrewDoug31
相关产品推荐
相关产品推荐

