虽然如果列表闭包中的条件尝试如果我正在获得异常,就像在if上的非预期令牌一样。
def supplerJson=new jsonSluper.parseText(json)
def details= supplerJson.get("student")
def jsonBuilder = new StreamingJsonBuilder(string)
jsonBuilder .root{
student {
info details.get("address").collect { addres ->
[
"city" : addres.city ,
if(addre.country.equals("USA"))
{
"country" : 123
}
]
}
}
这是我的代码片段,而像这样写我正在获得异常,如果在行#34; *"专栏" *"。任何人都可以帮忙解决这个问题。 感谢你。
答案 0 :(得分:1)
不要试图嵌入if
语句,而是使用ternary statement代替,例如:
[
"city": addres.city,
"country": addres.country.equals("USA") ? 123 : null
]
三元声明如下:
condition ? value if true : value if false
Groovy也有一个Elvis operator,它类似于三元语句并允许其他一些技巧,例如:
void doPrint(String message) {
println(message ?: 'default')
}
doPrint('My message') // Prints "My Message"
doPrint('') // Prints "default"
doPrint(null) // Prints "default"
Elvis运算符与三元语句的唯一区别在于value if true
自动为condition
语句。
这也证明Groovy truth message
被转换为布尔值以评估Elvis运算符,因此空值和空值都计算为false,这将打印" else&#34 ;值。
当您尝试构建内嵌地图时,所有这些都非常有用。
答案 1 :(得分:0)
您在问题中的代码有很多错误和遗漏......
假设你的Json是这样的:
def json = '''[
{
"student": {
"address": {
"city": "BoomTown",
"country": "USA"
}
}
},
{
"student": {
"address": {
"city": "Paris",
"country": "France"
}
}
}
]'''
你拼写JsonSlurper()
右:
def supplerJson = new JsonSlurper().parseText(json)
然后你可以得到所有的学生:
def details = supplerJson.student
我猜测string
是StringWriter
def stringWriter = new StringWriter()
def jsonBuilder = new StreamingJsonBuilder(stringWriter)
然后你可以这样构建你的json:
jsonBuilder .root {
student {
info details.address.collect { address ->
def map = ["city": address.city]
if (address.country == "USA") {
map << ["country": 123]
}
map
}
}
}
获得最终的json:
stringWriter.toString()