如何在Groovy中将InputStream转换为Map?

时间:2019-07-24 11:06:53

标签: groovy hashmap inputstream

假设我有一个包含JSON数据的 InputStream ,并且我想将其转换为Map(键值对),例如,可以将其写入日志文件。

采用InputStream并将其转换为Map的最简单方法是什么?

public String convertInputStreamToMap(InputStream isobj) {
    // ???
}

我尝试了转换为 String 的方法,该方法可以按预期工作,但是当数据真的很长时,数据将是不完整的。因此,我想要一种最简单的方法将其直接转换为Map。

2 个答案:

答案 0 :(得分:0)

使用ObjectMapper中的com.fasterxml.jackson.databind将输入流直接转换为Map: 例如:

objectMapper.readValue(is, Map.class);

答案 1 :(得分:0)

groovy中有一个内置类来解析json:groovy.json.JsonSlurper

它具有parse方法,几乎​​可以接受任何源,包括InputStream

def url = 'https://httpbin.org/get'.toURL()

def json = url.withInputStream{inputStream->
    new groovy.json.JsonSlurper().parse(inputStream)
}

println json.headers

,如果您要将InputStream转换为String,groovy提供了其他方法可用于InputStream类:https://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/InputStream.html

以下代码使用指定的字符集读取此InputStream的内容,并将其作为String返回。

String s = inputStream.getText("UTF-8")