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

如何用Groovy创建JSON对象并追加到已有JSON文件?

解决Groovy中JSON文件追加新条目的问题

核心解决方案

你已经将原始JSON和新生成的内容都解析为Groovy的LazyMap(Map的实现类),只需将新条目合并到原始Map中,再重新生成格式化JSON即可。以下是修正后的完整代码:

import groovy.json.*

def number = 2
def name = "demo-2"
def createdAt = "15:00 PM"
def owner = "bhowma"
def db_name = "DB2"

// 加载原始JSON文件为Map
def jsonSlurper = new JsonSlurper()
def originalMap = jsonSlurper.parse(new File('/tmp/sarva.json'))

// 直接构造新的stack条目Map
def newStackMap = [
    "stack-$number": [
        name: name,
        createdAt: createdAt,
        owner: owner,
        dbName: db_name
    ]
]

// 合并Map:将新条目追加到原始Map
originalMap.putAll(newStackMap)

// 生成格式化的JSON字符串
def mergedJson = JsonOutput.prettyPrint(JsonOutput.toJson(originalMap))

// 打印合并结果
println(mergedJson)

// 将结果写回文件(可选,覆盖原文件)
new File('/tmp/sarva.json').write(mergedJson)

关键优化点

  1. 去掉冗余解析步骤:无需用JsonBuilder生成JSON再用JsonSlurper解析,直接构造Groovy Map更高效。
  2. Map合并逻辑:putAll()方法会将新Map的所有键值对添加到原始Map中,新键(如stack-2)会直接追加,重复键则会覆盖(适合需要更新现有条目的场景)。
  3. 格式化输出:使用JsonOutput.prettyPrint()保证输出JSON的格式与预期一致,可读性更强。
  4. 支持多条目追加:如果需要添加多个新条目,只需构造包含多个键值对的Map,再调用putAll()即可。

预期输出

执行代码后,会得到与你需求一致的合并JSON:

{
    "stack-1": {
        "name": "demo",
        "createdAt": "11:00 PM",
        "owner": "sarva",
        "dbName": "DB"
    },
    "stack-2": {
        "name": "demo-2",
        "createdAt": "15:00 PM",
        "owner": "bhowma",
        "dbName": "DB2"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:55:17