Groovy中JSON(或JSONSlurper)中的动态键

时间:2017-11-06 07:58:45

标签: json groovy

Groovy中是否有类似的符号,就像在JavaScript中一样:

{

    "name": "Jason Closure"
    "characteristics": {
        "height": ...,
        "weight": ...,
        ...
    }

}

你可以在这里引用一个对象键:

def content = new JsonSlurper().parseText(json)
def char_key = // char_key can be 'height', 'weight',...
content.characteristics[char_key]

2 个答案:

答案 0 :(得分:2)

是的,您可以使用类似数组的表示法访问JSON节点,例如

import groovy.json.JsonSlurper

def json = '''{
    "name": "Jason Closure",
    "characteristics": {
        "height": 10,
        "weight": 20,
    }
}'''

def root = new JsonSlurper().parseText(json)
def key = 'height'

assert root.characteristics[key] == 10

您还可以使用插值的GString获取节点值,例如

assert root.characteristics."$key" == 10

答案 1 :(得分:0)

我的要求是当键也是动态键时,如何从json字符串中获取值,以下是相同的代码段, locator 中的动态键jsonText 。如果jsonText是 {“ name”:“ vijay”,“ address”:{“ country”:“ IN”,“ state”:“ Telangana”,“ city”:“ hyderabad”}} ,那么 locator 可以是“ name” “ address.state” “ address.city” 。请让我知道是否需要更多说明。

def getJsonProperty(String jsonText,String locator){
    def slurper = new JsonSlurper()
    def result = slurper.parseText(jsonText)
    println("responseObject:"+result)
    Binding binding = new Binding();
    binding.setVariable("result", result);
    GroovyShell shell = new GroovyShell(binding)
    return shell.evaluate("result."+locator)
}