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

如何用Python将类JSON格式的嵌套文本文件转换为JSON对象

类JSON嵌套文本转标准JSON的实现思路

完全可以实现这种转换,核心就是逐行遍历+状态跟踪,你猜的方向没错——必须判断行类型(键值对/嵌套块起始/结束),同时跟踪上一行的类型,才能正确添加引号、冒号和逗号。

核心逻辑拆解

先明确要处理的三类行:

  1. 嵌套块起始行(比如interfaces {):给块名加引号,后面补冒号(JSON要求键必须带冒号),保留{
  2. 键值对行(比如address 11.1.1.1/30):拆分键和值,分别加引号,中间补冒号,行尾视情况加逗号
  3. 嵌套块结束行(比如}):检查上一行是否是键值对/块起始,决定是否给上一行补逗号

还要维护两个关键状态:

  • 当前嵌套层级(控制缩进、判断同级元素)
  • 上一行的类型(判断是否需要补逗号)

具体实现步骤(附伪代码)

这里用Python风格的伪代码演示,逻辑通用:

# 预处理:读取并清理行(去空行、保留缩进)
with open('input.txt', 'r') as f:
    lines = [line.rstrip('\n') for line in f if line.strip()]

result = ['{']  # 最外层包裹大括号
indent_level = 1
last_line_type = None  # 记录上一行类型:'block_start'/'kv'/'block_end'

for line in lines:
    stripped = line.strip()
    current_indent = len(line) - len(stripped)
    
    if stripped.endswith('{'):
        # 处理嵌套块起始
        block_name = stripped[:-1].strip()
        formatted_line = f'{"    " * indent_level}"{block_name}": {{'
        # 上一行是块或键值对,补逗号
        if last_line_type in ['block_start', 'kv']:
            result[-1] += ','
        result.append(formatted_line)
        indent_level += 1
        last_line_type = 'block_start'
    
    elif stripped == '}':
        # 处理嵌套块结束
        indent_level -= 1
        formatted_line = f'{"    " * indent_level}}}'
        # 上一行是键值对,补逗号
        if last_line_type == 'kv':
            result[-1] += ','
        result.append(formatted_line)
        last_line_type = 'block_end'
    
    else:
        # 处理键值对(支持值带空格)
        key, *value_parts = stripped.split()
        value = ' '.join(value_parts)
        formatted_line = f'{"    " * indent_level}"{key}": "{value}"'
        # 上一行是块或键值对,补逗号
        if last_line_type in ['block_start', 'kv']:
            result[-1] += ','
        result.append(formatted_line)
        last_line_type = 'kv'

result.append('}')
# 输出转换后的JSON
print('\n'.join(result))

关键细节说明

  • 带空格的键处理:比如ethernet eth0,直接取{前面的所有内容作为键,避免拆分错误
  • 逗号添加规则:只有当前元素不是同级第一个元素时,才给前一个同级元素补逗号,通过跟踪上一行类型实现
  • 缩进维护:用indent_level控制输出缩进,保证JSON格式的可读性

把你的示例输入丢进去,就能得到完全合规的标准JSON(你给的目标格式里interfaces块和service块之间缺少逗号,上面的代码会自动补上)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:09:24