在Groovy(不是Grails)中,我想获得这样一个项目的颜色:
{
"8436": {
"color": "red",
}
}
“8436”号码是动态的,但总是只有一个。
我无法使用JsonSlurper的json.8436.color
语法,因为该数字将是硬编码的。
如何获得颜色?
答案 0 :(得分:4)
另一种选择,给出:
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'
答案 1 :(得分:2)
由于你对json输入的结构有所了解,你可以利用root是一个包含一个键的映射这一事实。
像这样:
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'
答案 2 :(得分:0)
更新:更好(更惯用?)方式
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