11

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
        }
    })

ただし、何をしても、Data セクションで 1 つの要素しか取得できません。{} の代わりに [] を使用してみましたが、まだ 1 つの要素しか取得できません。何が間違っていますか?

4

1 に答える 1

6

これは JSON 構造の重複キーです。同じ階層に重複するキーがあってはなりません。そうしないと、互いにオーバーライドされます

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}]}
于 2012-12-21T15:41:43.463 に答える