【问题标题】:How do I use groovy jsonbuilder with .each to create an array?如何将 groovy jsonbuilder 与 .each 一起使用来创建数组?
【发布时间】:2012-12-09 04:30:38
【问题描述】:

我想用 JSON-Builder 创建一个数组。

预期格式:

{
  "Header": {
    "SomeKey" : "SomeValue"
 }
  "Data": [
    { 
      "SomeKey" : "SomeValue"
    }, 
    {
     "SomeKey" : "SomeValue"
    }
  ]
}

我的代码:

    def builder = new groovy.json.JsonBuilder()

    def root = builder {
        Header {            
        "Typ" "update"
        "Code" "UTF-8"
        "TransaktionsNr" item.transactionNumber
        "DatumZeit" new Date().format("dd.MM.yyyy HH:mm")
    }

    customers.each ({ customer->           
        "Data" { 
            "Email" customer.code
            "Newsletter" customer.newsletterSubscribed
        }
    })

但是,无论我做什么,我都只能在数据部分得到一个元素。我尝试使用 [] 而不是 {},但我仍然只得到一个元素,我做错了什么?

【问题讨论】:

  • 我应该补充一点,我必须使用 each 或者更准确地说是一个从数据库中获取对象的闭包:'eachItem("customer", { customer ->'

标签: arrays groovy each jsonbuilder


【解决方案1】:

这是 JSON 结构的重复键。 There should not be duplicate key in the same hierarchy or they will override each other:

class Customer { String code; boolean newsletterSubscribed }

customers = [
  new Customer(code:"11111", newsletterSubscribed:true),
  new Customer(code:"22222", newsletterSubscribed:false)
]

def builder = new groovy.json.JsonBuilder()

def root = builder {
  Header {            
    "Typ" "update"
    "Code" "UTF-8"
    "TransaktionsNr" 987
    "DatumZeit" new Date().format("dd.MM.yyyy HH:mm")

  }

  customers customers.collect { customer ->
        ["Email":customer.code, 
        "Newsletter":customer.newsletterSubscribed]
    }

}

assert builder.toString() == {"Header":{"Typ":"update","Code":"UTF-8","TransaktionsNr":987,"DatumZeit":"21.12.2012 13:38"},"Data":{"Email":"22222","Newsletter":false},"customers":[{"Email":"11111","Newsletter":true},{"Email":"22222","Newsletter":false}]}

【讨论】:

  • 谢谢。我害怕我必须做这样的事情。问题是我在 150 万客户上使用它,并且字段比我的示例中的要多。我认为我无法将所有这些都保存在内存中,所以我想我必须编写自己的 json writer。不过还是谢谢。
  • 谢谢,我什至不知道。如果我不必拥有整个 JSON 结构,我 应该 能够将整个客户列表保存在内存中。现在,如果有人知道如何导出它而不需要在导出之前将所有数据都放在一个列表中,那将是完美的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 2013-06-25
  • 1970-01-01
相关资源
最近更新 更多