在 Groovy 中获取具有随机名称的单个节点的 JSON 个子节点
Get JSON children of single node with random name in Groovy
在Groovy(不是Grails)中,我想得到这样一个项目的颜色:
{
"8436": {
"color": "red",
}
}
“8436”号码是动态的,但始终只有一个。
我不能使用 JsonSlurper 的 json.8436.color
语法,因为数字会被硬编码。
如何获取颜色?
由于您对 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'
另一种选择,给定:
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'
更新:更好(更地道?)的方式
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
在Groovy(不是Grails)中,我想得到这样一个项目的颜色:
{
"8436": {
"color": "red",
}
}
“8436”号码是动态的,但始终只有一个。
我不能使用 JsonSlurper 的 json.8436.color
语法,因为数字会被硬编码。
如何获取颜色?
由于您对 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'
另一种选择,给定:
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'
更新:更好(更地道?)的方式
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