Groovy JSON 数组生成器,在闭包内包含自定义成员
Groovy JSON array builder with custom members inside of closure
我将从我的项目列表中创建简单的 JSON 数组。我找到了如何使用 JsonBuilder 进行操作的很好示例。看起来像:
class Author {
String name
}
def authors = [new Author (name: "Guillaume"),
new Author (name: "Jochen"),
new Author (name: "Paul")]
def json = new groovy.json.JsonBuilder()
json authors, { Author author ->
name author.name
}
但是,我必须向我的 JSON 添加自定义 属性。它必须看起来像:
json authors, { Author author ->
def c = author.name.bytes.encodeBase64()
name author.name
code c
}
但是这段代码不起作用,我必须以某种方式将 JSON 成员和闭包成员分开。坦率地说,我不是 groovy 方面的大专家,我猜答案可能有点简单。
此外,我知道我可以创建我的项目的自定义列表并以下一种方式转换此列表:
def json = new groovy.json.JsonBuilder(authors)
但是,我想在闭包中实现它。
您可以使用 GString 创建 base64 字符串:
import groovy.json.JsonBuilder
def json(items) {
def builder = new JsonBuilder()
builder(items.collect { item ->
[
name: item.name,
code: "${item.name.bytes.encodeBase64()}"
]
})
builder.toString()
}
def authors = [
[ name: "John Doe" ]
]
assert json(authors) == '[{"name":"John Doe","code":"Sm9obiBEb2U="}]'
您建议的代码生成 [[name:Guillaume, code:R3VpbGxhdW1l], [name:Jochen, code:Sm9jaGVu], [name:Paul, code:UGF1bA==]]
,那么您的代码就可以了吗?您的环境似乎阻止了此脚本。
我将从我的项目列表中创建简单的 JSON 数组。我找到了如何使用 JsonBuilder 进行操作的很好示例。看起来像:
class Author {
String name
}
def authors = [new Author (name: "Guillaume"),
new Author (name: "Jochen"),
new Author (name: "Paul")]
def json = new groovy.json.JsonBuilder()
json authors, { Author author ->
name author.name
}
但是,我必须向我的 JSON 添加自定义 属性。它必须看起来像:
json authors, { Author author ->
def c = author.name.bytes.encodeBase64()
name author.name
code c
}
但是这段代码不起作用,我必须以某种方式将 JSON 成员和闭包成员分开。坦率地说,我不是 groovy 方面的大专家,我猜答案可能有点简单。
此外,我知道我可以创建我的项目的自定义列表并以下一种方式转换此列表:
def json = new groovy.json.JsonBuilder(authors)
但是,我想在闭包中实现它。
您可以使用 GString 创建 base64 字符串:
import groovy.json.JsonBuilder
def json(items) {
def builder = new JsonBuilder()
builder(items.collect { item ->
[
name: item.name,
code: "${item.name.bytes.encodeBase64()}"
]
})
builder.toString()
}
def authors = [
[ name: "John Doe" ]
]
assert json(authors) == '[{"name":"John Doe","code":"Sm9obiBEb2U="}]'
您建议的代码生成 [[name:Guillaume, code:R3VpbGxhdW1l], [name:Jochen, code:Sm9jaGVu], [name:Paul, code:UGF1bA==]]
,那么您的代码就可以了吗?您的环境似乎阻止了此脚本。