[英]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 優點來處理地圖和列表( collect
、 findAll
、 groupBy
等)來改變您的數據,然后作為最后一步生成您的 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.