在尝试使用groovy获取异常时,在列表闭包中写入条件

时间:2018-04-13 15:00:20

标签: groovy

虽然如果列表闭包中的条件尝试如果我正在获得异常,就像在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; *"专栏" *"。任何人都可以帮忙解决这个问题。 感谢你。

2 个答案:

答案 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

我猜测stringStringWriter

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()