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

如何对大型JSON/NDJSON文件执行基于数学运算的批量字段修改?

超大JSON/NDJSON字段批量修改方案

处理超大文件的核心原则:绝对不要将整个文件加载到内存,针对你实际使用的NDJSON(每行一个独立JSON对象)格式,逐行读取处理即可,不管文件多大内存占用都能保持在极低水平。


方案1:使用jq命令行工具(推荐,效率最高)

jq原生支持流式处理NDJSON,无需写复杂代码,一行命令即可完成需求。
你的文件中交替存在{"index": {...}}元数据行和真实业务数据行,命令可以加判断仅修改带price字段的行,其他行原样保留:

jq -c 'if has("price") then .price = (.price / 10) else . end' 输入文件名.ndjson > 输出文件名.ndjson

参数说明:

  • -c 表示压缩输出,保持每行一个JSON的NDJSON格式,不会破坏原文件结构
  • 逻辑非常简单:判断当前行JSON是否存在price字段,存在则将price除以10,否则直接输出原内容
    该方案处理GB级别的NDJSON文件也不会占用过高内存,执行速度远快于自己写脚本。

方案2:Python逐行处理(适合需要自定义复杂逻辑的场景)

如果后续还有其他自定义处理需求,可以用Python写轻量脚本实现,全程逐行读写:

import json

# 替换为你自己的输入、输出文件路径
input_path = "你的原始文件.ndjson"
output_path = "修改后的文件.ndjson"

with open(input_path, "r", encoding="utf-8") as f_in, open(output_path, "w", encoding="utf-8") as f_out:
    for line in f_in:
        line = line.strip()
        if not line:
            continue
        data = json.loads(line)
        # 仅处理带price字段的业务数据行
        if "price" in data:
            # 如果需要整除取整可以把/换成//
            data["price"] = data["price"] / 10
        f_out.write(json.dumps(data, ensure_ascii=False) + "\n")

通用场景扩展(对应你最初的salary除以k需求)

如果是处理普通大体积JSON数组而非NDJSON,可以用流式JSON解析工具处理,比如Python的ijson库,同样是逐块解析不会加载整个文件。如果是其他字段的数值修改,把上述方案中对应的字段名、除数替换成你需要的内容即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:03:02