You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

代码解释

  1. 读取并统一换行符:用replace('\r\n', '\n')处理Windows系统的换行符,避免分割时出现问题。
  2. 分割成组:content.split('\n\n')直接把文本按空白行拆分成各个键值对组,再用列表推导式过滤掉空的组(比如文件开头/结尾的空白行)。
  3. 处理每个组:对每个组,初始化一个空字典group_dict,遍历组内的每一行,分割键值对并添加到字典中,最后把这个字典加入结果列表。
  4. 写入JSON:用json.dump()直接写入文件,比先转成字符串再写更高效。

测试效果

用你提供的示例数据,运行后dump.json的内容会是:

[
    {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"
    },
    {
        "key1": "value4",
        "key2": "value5",
        "key3": "value6"
    }
]

完全符合你的预期需求。

内容的提问来源于stack exchange,提问作者DrewDoug31

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 13:17:36