我想在‘for()’循环中将数组元素添加到JSON中

  def builder = new JsonBuilder()
  def json = builder.si {
    content 'test'
  }
  json.si.put('myList',[])
  for (t=0; t < 2; t++) {
    json.si.myList.add({
      sval t.asString()
      ival t
    })

  }

预期的结果是

{
    "si": {
        "content": "test",
        "myList": [
            {
                "sval": "0",
                "ival": 0
            },
            {
                "sval": "1",
                "ival": 1
            }
        ]
    }
}

但由此产生的JSON是

{
    "si": {
        "content": "test",
        "myList": [
            {
                "sval": "2",
                "ival": 2
            },
            {
                "sval": "2",
                "ival": 2
            }
        ]
    }
}

如您所见,我无法将‘for’-varabel‘t’的当前值放入JSON数组条目.在离开for循环后,它始终使用‘t’的值

为什么?

推荐答案

你可以这样做:

import groovy.json.JsonBuilder

def builder = new JsonBuilder()
def json = builder.si {
    content 'test'
}
json.si.put('myList', [])
for (t = 0; t < 2; t++) {
    json.si.myList.add([sval: t.toString(), ival: t])
}

println "JSON: ${builder.toPrettyString()}"

实现中的问题是,您不直接赋值,而是在您已经离开循环时声明"按需"执行的闭包.

Json相关问答推荐

如何使用GoFr返回XML响应?

在Reaction中从JSON文件中筛选数组

递归解码嵌套列表(具有任意深度的列表列表)

如何使用jq使用子值对象的键对json对象进行分组

XSLT 3.0 Json-to-xml,json 包含 html struct

在Databricks中如何将JSON文件作为字典读取

JSON 的自定义编组器,可以是字符串或 map[string]string / map[string]bool

将环境变量值从 yaml 传递到 json

使用带有逗号的字段名称构建 struct

如何将 XML 转换为 PsCustomObject 以允许最终导出为 JSON?

N1QL 搜索对象内的某些对象

如何删除 django jsonfield 中的特定项目

Android 上的 JSON - 序列化

什么是类型和类型令牌?

如何在 swift 2 中获取 Alamofire.request().responseJSON 的结果值?

使用 Node.js 对 JSON 中的字符串大小有限制吗?

PostgreSQL 中的 JSON 模式验证?

在 Webpack 中加载静态 JSON 文件

Peewee 模型转 JSON

SCRIPT5009:JSON未定义