json - 使用groovy解析响应Json字符串

标签 json parsing groovy response

4 使用 httpbuilder 检查进程的状态并获取以下响应。

  {"result":[{"id":"167687","dapadmin":"false","status":"in progress","lastupdated":"2017-04-21 14:34:30.0","started":"2017-04-21 14:34:28.0","user":"sys","log":"Running a Stop action\n\nRunning command \n"}]}

无法使用 jsonSlurper.parseText() 解析此响应,给出错误

当我使用`

def json = JsonOutput.toJson(statusresponse)    
println JsonOutput.prettyPrint(json)    

我可以看到它被打印为 json 对象

{
    "result": [
        {
            "id": "167687",
            "dapadmin": "false",
            "status": "in progress",
            "lastupdated": "2017-04-21 14:34:30.0",
            "started": "2017-04-21 14:34:28.0",
            "user": "dapsystem",
            "log": "Running a Stop action\n\nRunning command \n"
        }
    ]
}    

当我检查 getClass() 时,它打印为 java.lang.String。

我需要从此响应中获取 lastupdated 和 status 、 id 值。请帮我找到解决方案。

非常感谢

嗨,延培。

感谢您的回复。

我按照您的建议使用以下代码。

    def statusresponse = http.putText(baseurl,path,query,headerMap, Method.GET)
             println("The status response value is"  )
             statusresponse.each{ k, v -> 
                 println "${k}:${v}" 
             }

             def json = JsonOutput.toJson(statusresponse)
              println "JSON Object List : " + json
              println "------------------"
                              println JsonOutput.prettyPrint(json)
                println "The result class  is "+json.getClass()
                println "The result status  is "+(json instanceof Map)


                //def entry = slurper.parseText(json)

                def slurper = new groovy.json.JsonSlurper()
                def entry = slurper.parseText(statusresponse)
                def lastupdated = entry.result.lastupdated
                checkStatus = entry.result.status
                def id = entry.result.id        

我收到以下错误

       The result class  is class java.lang.String
        Caught: groovy.lang.MissingMethodException: No signature of method: groovy.json.JsonSlurper.parseText() is applicable for argument types: (java.util.HashMap) values: [[result:[[id:170089, dapadmin:false, status:in progress, ...]]]]
        Possible solutions: parseText(java.lang.String), parse(java.io.Reader)
groovy.lang.MissingMethodException: No signature of method: groovy.json.JsonSlurper.parseText() is applicable for argument types: (java.util.HashMap) values: [[result:[[id:170089, dapadmin:false, status:in progress, ...]]]]
        Possible solutions: parseText(java.lang.String), parse(java.io.Reader)
    at dap.Main.main(Main.groovy:171)

如果我使用下面的代码,它就会起作用

 def json = JsonOutput.toJson(statusresponse)
 def entry = slurper.parseText(json)

得到的结果如下

The status of the action is :[in progress]
Last updated [2017-04-23 17:08:02.0]
the id is[170088]       

首先,我不确定为什么建议的代码会抛出此错误 其次,为什么我在括号内得到工作解决方案的结果?

最佳答案

def slurper = new groovy.json.JsonSlurper()
def entry = slurper.parseText('{"result":[{"id":"167687","dapadmin":"false","status":"in progress","lastupdated":"2017-04-21 14:34:30.0","started":"2017-04-21 14:34:28.0","user":"sys","log":"Running a Stop action\n\nRunning command \n"}]}')
def lastupdated = entry.result.lastupdated
def status = entry.result.status
def id = entry.result.id

应该可以。看不到您的错误,因此我无法提供更好的信息。

关于json - 使用groovy解析响应Json字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43549633/

相关文章:

grails - Grails 2.0缺陷NoClassDefFound问题

variables - 关于grails域类变量的简单问题

javascript - 语法错误: "JSON.parse: unexpected non-whitespace ..." when returning JSON from PHP

json - 使用 jq select 元素和包含一些字符串的键,键保留在结果中

python - 美丽汤 4 + python : string returns 'None'

在 Haskell 中解析化合物

python - 使用python将Linux文件中的信息解析到Windows

javascript - 如何将变量传递给 Zendesk 中的应用程序

jquery ajax post 数据类型 : 'JSON' works on Android but fails on iPhone4

grails - Grails上的Quartz插件错误