【问题标题】:How do I convert an InputStream into a Map in Groovy?如何在 Groovy 中将 InputStream 转换为 Map?
【发布时间】:2019-07-24 11:06:53
【问题描述】:

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

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

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

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

【问题讨论】:

标签: groovy hashmap inputstream


【解决方案1】:

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

objectMapper.readValue(is, Map.class);

【讨论】:

    【解决方案2】:

    在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 s = inputStream.getText("UTF-8")
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 此代码回答问题的附加上下文可提高其长期价值.
    猜你喜欢
    • 2011-09-21
    • 2018-11-03
    • 1970-01-01
    • 2020-08-13
    • 2021-04-08
    • 2019-11-04
    • 2011-04-12
    • 2011-12-12
    相关资源
    最近更新 更多