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

如何不打开200MB单行JSON文件将其转换为多行格式?

解决大单行JSON美化问题(无需打开编辑器)

这种200MB级别的单行JSON,直接用编辑器打开卡爆太正常了,而且你遇到的json.tool报错,核心原因大概率是你的文件不是单个合法的JSON实体——比如是多个JSON对象直接拼接在一行(像{"id":1}{"id":2}这种格式),而python -m json.tool只支持解析单个JSON对象/数组,所以会报"Extra data"错误,解析失败后自然生成空文件。

下面给你几个高效的替代方案,全是命令行操作,完全不用打开文件:

方案1:用jq工具(最推荐,高效处理大文件)

jq是专门处理JSON的命令行神器,对大文件友好,支持流式处理,不会把整个200MB文件一股脑加载到内存里。

  • 安装jq:

    • Linux:用系统包管理器,比如apt install jq(Debian/Ubuntu)或yum install jq(CentOS)
    • macOS:用Homebrew,brew install jq
    • Windows:直接下载官方二进制文件放到系统PATH里就行
  • 使用命令:

    • 如果你的文件是多个JSON对象拼接在一行:
      jq -s '.' myjsonfile.json > pretty.json
      
      -s参数会把所有输入的JSON实体打包成一个数组,再美化输出。
    • 如果确认是单个合法JSON对象/数组(之前报错可能是偶发问题):
      jq '.' myjsonfile.json > pretty.json
      

方案2:Python流式处理脚本(无需额外安装工具)

如果不想装新工具,可以用这个Python脚本,它会分块读取文件,避免一次性加载200MB内容到内存,还能处理单行多个JSON的情况:

创建一个pretty_json.py文件,内容如下:

import json
import sys

def process_large_json(input_path, output_path):
    with open(input_path, 'r', encoding='utf-8') as infile, open(output_path, 'w', encoding='utf-8') as outfile:
        buffer = ""
        # 按1MB块读取,避免内存溢出
        while chunk := infile.read(1024 * 1024):
            buffer += chunk
            # 尝试解析buffer中的JSON,成功就写入并清空buffer
            while True:
                try:
                    # 从buffer开头解析JSON
                    obj, idx = json.JSONDecoder().raw_decode(buffer)
                    json.dump(obj, outfile, indent=2)
                    outfile.write('\n')
                    buffer = buffer[idx:].lstrip()  # 去掉已解析的部分,清理空白
                except json.JSONDecodeError:
                    # 解析失败,继续读取下一块
                    break
        # 处理最后剩余的buffer
        if buffer.strip():
            try:
                obj = json.loads(buffer)
                json.dump(obj, outfile, indent=2)
            except json.JSONDecodeError as e:
                print(f"警告:最后一段内容解析失败,错误位置:{e.pos},内容预览:{buffer[:100]}...", file=sys.stderr)

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("用法:python pretty_json.py <输入JSON文件> <输出美化文件>", file=sys.stderr)
        sys.exit(1)
    process_large_json(sys.argv[1], sys.argv[2])

然后运行命令:

python pretty_json.py myjsonfile.json pretty.json

方案3:用yq工具(兼容JSON/YAML)

yq是jq的超集,支持处理YAML和JSON,用法和jq类似:

yq -P '.' myjsonfile.json > pretty.json

-P参数表示"pretty print",专门用来美化输出。

为什么之前的json.tool失败?

python -m json.tool的设计是处理单个完整的JSON对象或数组,如果你的文件是多个JSON直接拼接(没有用数组包裹),它就会识别为"多余数据",解析失败后自然不会生成内容。而上面的方案都能处理这种多JSON的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:10:48