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

Groovy向JSON数组添加多键值对象出错,请求代码修正

问题

初始JSON结构:

{
    "books": []
}

预期通过循环向books数组添加一个包含bookId、bookName、bookYear、bookPrice的对象,最终结果如下:

{
    "books": [
        {
            "bookId": "1",
            "bookName": "name1",
            "bookYear": "2010",
            "bookPrice": "5.00"
        }
    ]
}

尝试的代码:

import groovy.json.*

def json = new JsonSlurper().parseText('''{"books":[]}''')
List<String> keys = Arrays.asList("bookId", "bookName", "bookYear", "bookPrice");
List<String> values = Arrays.asList("1", "name", "2010", "5.00");
for(int i = 0; i < keys.size(); i++)
{
    String key = keys.get(i)
    String value = values.get(i)
    json.books << [key: value]
}

return JsonOutput.toJson(json)

得到的错误结果:

{
    "books": [
        {
            "bookId": "1"
        },
        {
            "bookName": "name1"
        },
        {
            "bookYear": "2010"
        },
        {
            "bookPrice": "5.00"
        }
    ]
}
修正方案

问题核心是循环内每次都向books数组插入单个键值对的新对象,而非把所有键值对整合到同一个对象后再添加到数组。

基础修正版代码

import groovy.json.*

def json = new JsonSlurper().parseText('''{"books":[]}''')
List<String> keys = Arrays.asList("bookId", "bookName", "bookYear", "bookPrice");
List<String> values = Arrays.asList("1", "name1", "2010", "5.00");

// 先创建空对象存储所有图书属性
def book = [:]
for(int i = 0; i < keys.size(); i++) {
    String key = keys.get(i)
    String value = values.get(i)
    book[key] = value
}

// 将完整的图书对象添加到books数组
json.books << book

return JsonOutput.toJson(json)

Groovy简化版代码

利用Groovy的集合特性可以更简洁地实现:

import groovy.json.*

def json = new JsonSlurper().parseText('''{"books":[]}''')
List<String> keys = ["bookId", "bookName", "bookYear", "bookPrice"]
List<String> values = ["1", "name1", "2010", "5.00"]

// 通过transpose和collectEntries快速生成键值对对象
def book = [keys, values].transpose().collectEntries()
json.books << book

return JsonOutput.toJson(json)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:35:23