在尝试使用groovy getting exception在列表闭包中写入if条件时

在尝试使用groovy getting exception在列表闭包中写入if条件时,groovy,Groovy,在尝试写入列表闭包中的if条件时,我在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 { addre

在尝试写入列表闭包中的if条件时,我在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
           }
     ]
}
}
这是我这样写时的代码片段,如果在第*行*列*处发现异常,则会得到类似意外标记的异常。谁能帮我一下吗。
谢谢。

不要尝试嵌入if语句,而是使用,例如:

[
    "city": addres.city,
    "country": addres.country.equals("USA") ? 123 : null
]
三元语句被理解为:

condition ? value if true : value if false
Groovy还有一个类似于三元语句的函数,它允许一些其他技巧,例如:

void doPrint(String message) {
    println(message ?: 'default')
}

doPrint('My message') // Prints "My Message"
doPrint('')           // Prints "default"
doPrint(null)         // Prints "default"
Elvis运算符与三元语句的唯一区别在于,如果为true,则值自动成为条件语句

这还演示了如何将消息转换为布尔值以计算Elvis运算符,因此空值和null值都计算为false,从而打印else值

当您尝试构建内联映射时,所有这些都很有用

工具书类 docs.groovy-lang.org docs.groovy-lang.org groovy-lang.org
问题中的代码有大量错误和遗漏

假设您的Json类似于:

def json = '''[
  { 
      "student": {
          "address": {
              "city": "BoomTown",
              "country": "USA"
          }
      }
  },
  {
      "student": {
          "address": {
              "city": "Paris",
              "country": "France"
          }
      }
  }
]'''
你把JsonSlurper拼对了:

然后你可以得到所有的学生:

def details = supplerJson.student
我猜字符串是一个编剧

然后您可以像这样构建json:

jsonBuilder .root {
    student {
        info details.address.collect { address ->
            def map = ["city": address.city]
            if (address.country == "USA") {
                map << ["country": 123]
            }
            map
        }
    }
}

你好!不能将if语句放在映射定义的中间。。。当我使用电脑时,我会努力想出一个解决方案谢谢你的大脑,它对我帮助很大
def stringWriter = new StringWriter()
def jsonBuilder = new StreamingJsonBuilder(stringWriter)
jsonBuilder .root {
    student {
        info details.address.collect { address ->
            def map = ["city": address.city]
            if (address.country == "USA") {
                map << ["country": 123]
            }
            map
        }
    }
}
stringWriter.toString()