在 Groovy(不是 Grails)中,我想获得这样一个项目的颜色:
{
"8436": {
"color": "red",
}
}
“8436”号码是动态的,但始终只有一个。
我不能使用 JsonSlurper 的json.8436.color
语法,因为数字是硬编码的。
如何获得颜色?
在 Groovy(不是 Grails)中,我想获得这样一个项目的颜色:
{
"8436": {
"color": "red",
}
}
“8436”号码是动态的,但始终只有一个。
我不能使用 JsonSlurper 的json.8436.color
语法,因为数字是硬编码的。
如何获得颜色?
另一种选择,给定:
def jsonStr = '''{
"8436": {
"color": "red",
}
}'''
你可以这样做:
import groovy.json.JsonSlurper
def json = new JsonSlurper().parseText(jsonStr)
def (rootKey, color) = json.findResult { k, v -> [k, v.color] }
assert rootKey == '8436'
assert color == 'red'
由于您对 json 输入的结构有所了解,因此您可以利用根是包含一个键的映射这一事实。
像这样:
import groovy.json.JsonSlurper
def json = new JsonSlurper().parseText('{"8436":{"color":"red"}}')
def rootKey = json.keySet()[0]
assert rootKey == '8436'
assert json[rootKey].color == 'red'
更新:更好(更惯用的?)方式
import groovy.json.JsonSlurper
def jsonStr = """
{
"8436": {
"color": "red",
}
}
"""
def json = new JsonSlurper().parseText(jsonStr)
def color = json.each {}.collect{it.value.color}[0]
println color
======= 旧版本,存储在闭包外部变量中 =======
为什么不这样:
import groovy.json.JsonSlurper
def jsonStr = """
{
"8436": {
"color": "red",
}
}
"""
def json = new JsonSlurper().parseText(jsonStr)
def color
json.each { color = it.value.color}
println color