我是groovy的新手,我想用构建器
构造一个json对象{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{ "match": { "content": "scontent" } },
{ "match": { "title":"stitle" } }
]
}
},
{
"bool": {
"should": [
{ "match": { "a1": "v1" } },
{ "match": { "a2":"v2" } },
... and so on ...
{ "match": { "an":"vn" } }
]
}
}
]
}
},
"highlight": {
"fields": {
"content":{}
}
}
}
我在stackoverflow上搜索了很多关于其他帖子的内容,我编写了这段代码 所以我做了这个,但没办法得到我想要的东西:
JsonBuilder builder = new JsonBuilder()
def body = builder {
from Lib.or(qQuery.start, 0)
size Lib.or(qQuery.num, 10)
query {
bool {
must [
{
bool {
should [
{ match { content 'scontent' } },
{ match { title 'stitle' } }
]
}
},
{
bool {
should myVals.collect {[
'match' : { it.key it.value }
]}
}
}
]
}
}
highlight {
fields {
content {}
}
}
}
感谢您的帮助!
答案 0 :(得分:3)
我认为您可以按原样使用JsonBuilder,但通常使用地图和列表(这是构建器输出的内容)创建数据结构更容易,因为您可以更好地控制它。
示例代码:
import groovy.json.*
def data = [
query: [
bool: [
must: [
[bool:
[should: [
[match: [ content: 'scontent']],
[match: [ title: 'stitle']]
]]
],
[bool:
[should: [
[match: [ a1: 'v1']],
[match: [ a2: 'v2']],
[match: [ vn: 'vn']]
]]
]
]
]
]
]
println JsonOutput.prettyPrint(JsonOutput.toJson(data))
产生:
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"match": {
"content": "scontent"
}
},
{
"match": {
"title": "stitle"
}
}
]
}
},
{
"bool": {
"should": [
{
"match": {
"a1": "v1"
}
},
{
"match": {
"a2": "v2"
}
},
{
"match": {
"vn": "vn"
}
}
]
}
}
]
}
}
}
我没有包含你的完整json,因为它占用了一些空间,但结构就在那里。请注意在数据结构中使用列表([valueA, valueB]
)vs maps([someKey: someValue]
)。
当然,这使得JsonBuilder的使用率低于100%,但我还没有看到任何简洁的方法在结构中的列表中包含大型json对象的列表。你可以这样做:
def json = JsonBuilder()
json.query {
bool('list', 'of', 'values')
}
但对于较大的结构作为列表元素,我会说采用列表和地图方法。