使用Groovy根据条件访问JSON中的值

时间:2018-10-10 15:04:13

标签: java json groovy httpresponse jsonslurper

我正在尝试从httpResponse(以JSON形式)中提取两组信息-
1.位置
2.水果=苹果且luckyNumber = 10的城市。

{
    "userInformation": {
        "Name": "John",
        "Location": "India"
    },
    "details": [
        {
            "fruit": "Apple",
            "color": "Red",
            "city": "New Delhi",
            "luckyNumber": 10
        },
        {
            "fruit": "Banana",
            "color": "yellow",
            "city": "Goa",
            "luckyNumber": 12
         }
         ]
         }

要提取位置,我尝试了以下代码:

def slurper = new JsonSlurper().parseText(httpResponse)

userLocation = slurper.userInformation.Location

这给我一个错误-

javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: groovy.json.JsonSlurper.parseText() is applicable for argument types: (java.util.LinkedHashMap) values: [[statusCode:200, reason:OK, headers:[Access-Control-Allow-Credential:true, ...], ...]] Possible solutions: parseText(java.lang.String), parse([B), parse([C), parse(java.io.File), parse(java.io.InputStream), parse(java.io.Reader) 

2 个答案:

答案 0 :(得分:0)

错误

No signature of method: groovy.json.JsonSlurper.parseText() is applicable for
       argument types: (java.util.LinkedHashMap)
Possible solutions: parseText(java.lang.String), ...

表示当此方法接受String时,您尝试将Map(httpResponse)传递到JsonSlurper.parseText()中。

找到如何将响应主体作为字符串获取,然后可以使用JsonSlurper.parseText()

答案 1 :(得分:0)

可能您需要httpResponse.getData()或仅httpResponse.data来访问响应数据有效负载。如果已根据Content-Type正确解析了响应,则此数据可能已经在地图中,在这种情况下,您无需使用JsonSlurper。如果数据是json字符串,则使用JsonSlurper。

无论如何,你都会有类似的东西

def cities = responseData.details.findAll{it.fruit=="Apple" && it.luckyNumber==10}