簡體   English   中英

如何使用 Groovy JsonBuilder 生成具有嵌套兄弟姐妹的對象數組

[英]How to Generate an Array of Objects with Nested Siblings with Groovy JsonBuilder

我正在嘗試生成一個包含多個嵌套對象的 JSON 數組。

這是我想要生成的:(由於我想要一個數組,因此縮短了輸出,如果您運行代碼,這只會重復):

[
    {
        "User": {
            "Name": "Foo",
            "Email": "test@example.com"
        },
        "Details": {
            "Address": {
                "City": "Anywhere",
                "Country": "USA",
                "State": "ID",
                "ZipCode": "55842"
            },
            "FavoriteColor": "Blue"            
        }
    }
]

相反,我正在生成這個:

[
        {
            "User": {
                "Name": "Foo",
                "Email": "test@example.com"
            },
            "Address": {
                "City": "Anywhere",
                "Country": "USA",
                "State": "ID",
                "ZipCode": "55842"
            },
            "Details": [
                {
                    "FavoriteColor": "Blue"
                },
                {
                    "City": "Anywhere",
                    "Country": "USA",
                    "State": "ID",
                    "ZipCode": "55842"
                }
            ]
        }
    ]

這是我的代碼:

def array = 1..3

def builder = new groovy.json.JsonBuilder()
builder array.collect { itemNumber ->
    [{
        User(
            Name: "Foo" + itemNumber,
            Email: "test@example.com"
        )
        Details(
            Address(
                City: "Anywhere",
                Country: "USA",
                State: "ID",
                ZipCode: "55842"
            ),
            FavoriteColor: "Blue"
        )
    }
    ]
}

println groovy.json.JsonOutput.prettyPrint(builder.toString())

就像評論中提到的那樣,根據我的經驗,最好繼續使用 groovy 中的列表和地圖,並且僅將轉換為 json 作為最后一步。 通過這種方式,您可以使用所有 groovy 優點來處理地圖和列表( collectfindAllgroupBy等)來改變您的數據,然后作為最后一步生成您的 json。

示例代碼:

import groovy.json.JsonOutput

def numbers = 1..3

def data = numbers.collect { n -> 
  [
    User: [
      Name: "Foo${n}", 
      Email: "test@example.com"
    ],
    Details: [
      Address: [
        City:     "Anywhere", 
        Country:  "USA", 
        State:    "ID", 
        ZipCode:  "55842"
      ],
      FavoriteColor: "Blue"
    ]
  ]
}

def json   = JsonOutput.toJson(data)
def pretty = JsonOutput.prettyPrint(json)
println "JSON:\n${pretty}"

運行時會生成:

─➤ groovy solution.groovy
JSON:
[
    {
        "User": {
            "Name": "Foo1",
            "Email": "test@example.com"
        },
        "Details": {
            "Address": {
                "City": "Anywhere",
                "Country": "USA",
                "State": "ID",
                "ZipCode": "55842"
            },
            "FavoriteColor": "Blue"
        }
    },
    {
        "User": {
            "Name": "Foo2",
            "Email": "test@example.com"
        },
        "Details": {
            "Address": {
                "City": "Anywhere",
                "Country": "USA",
                "State": "ID",
                "ZipCode": "55842"
            },
            "FavoriteColor": "Blue"
        }
    },
    {
        "User": {
            "Name": "Foo3",
            "Email": "test@example.com"
        },
        "Details": {
            "Address": {
                "City": "Anywhere",
                "Country": "USA",
                "State": "ID",
                "ZipCode": "55842"
            },
            "FavoriteColor": "Blue"
        }
    }
]

關於 groovy 中地圖鍵的說明,我沒有在上面引用我的,因為當您的鍵是有效標識符(即不是Favourite-Color類的東西)時,您不需要引號。 如果您遇到打破上述模式的鍵,您可以隨時引用這些鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM