【问题标题】:JsonSlurper returns No signature of method: groovy.json.JsonSlurper.parseText() is applicable for argument types: (java.util.ArrayList)JsonSlurper 返回无方法签名:groovy.json.JsonSlurper.parseText() 适用于参数类型:(java.util.ArrayList)
【发布时间】:2015-06-05 16:22:41
【问题描述】:

我正在尝试使用 JsonSlurper.parseText 解析 JSON 文件,但不断遇到类似问题。

def jsonParse = null
def http = new HTTPBuilder(url)
http.auth.basic(username, password)
http.request(Method.GET) {
    response.success = { resp, reader ->;
      jsonParse = new JsonSlurper().parseText(reader)
    }
}

每当我运行我的应用程序时,都会显示错误消息

没有方法签名:groovy.json.JsonSlurper.parseText() 适用于参数类型:(java.util.ArrayList)

我知道 JsonSlurper.parseText() 要求 java.util.ArrayList 类型作为输入。所以我尝试了以下方法来确定使用此代码的输入类型。

def jsonParse = null
def http = new HTTPBuilder(url)
http.auth.basic(username, password)
http.request(Method.GET) {
    response.success = { resp, reader ->;
      jsonParse = reader
    }
}
render jsonParse.getClass()

这会打印出以下内容:

class java.util.ArrayList

我不明白为什么当我用正确的数据类型提供输入时会出现此错误。

有什么建议吗?

【问题讨论】:

标签: json parsing groovy jsonslurper


【解决方案1】:

根据documentation,HTTPBuilder 可能正在为您解析 JSON。如果您的 JSON 响应的根是 JSON 数组,那么这就解释了 reader 变量中的 ArrayList 对象。

关于这如何解释抛出的异常。闭包的 reader 参数是解析后的 JSON 的 ArrayList,而不是未解析的 JSON 的 String。因此,new JsonSlurper().parseText(reader) 上的代码失败,因为 reader 不是文本,并且 JsonSlurper 没有定义如何将 ArrayList 解析为 JSON 的方法。

【讨论】:

  • 上帝...我发誓我从来没有想过 HTTPBuilder 会为我解析 JSON...非常感谢!!
  • 这解决了 OP 的问题,但没有回答 OP 的问题。这个问题在搜索这个问题的答案时不断出现在谷歌结果中,但是这个问题的公认答案是提供一种解决方法,而不是对实际问题的回答:JsonSlurper 返回没有方法签名:groovy.json.JsonSlurper.parseText( ) 适用于参数类型:(java.util.ArrayList)
猜你喜欢
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多