如何从 JsonObject 创建 InputStream 对象

Posted

技术标签:

【中文标题】如何从 JsonObject 创建 InputStream 对象【英文标题】:How to Create InputStream Object from JsonObject 【发布时间】:2014-07-12 01:17:03 【问题描述】:

我试图弄清楚如何检索存储在 JsonObject 中的原始字节并将其转换为 InputStream 对象?

我想可能是这样的:

InputStream fis = new FileInputStream((File)json.getJsonObject("data"));

当然,我还没有尝试过,但只是想知道是否有人对此有任何经验并知道首选的方法?

【问题讨论】:

以防万一您遇到必须流式传输非常大的 JSON 对象的内容的情况,这可能会在 toString() 方法调用上产生 OutOfMemory 错误,请使用多个 ByteArrayInputStreams 作为呈现的@987654321 @ 【参考方案1】:

您可以将JSONObject 转换为其String 表示,然后将该字符串转换为InputStream

问题中的代码将 JSONObject 转换为 File,但我不确定这是否按预期工作。但是,以下是我之前做过的事情(目前从记忆中复制):

String str = json.getJSONObject("data").toString();
InputStream is = new ByteArrayInputStream(str.getBytes());

请注意,JSONObjecttoString() 方法会覆盖 java.lang.Object 类中的方法。

来自Javadoc:

返回:对象的可打印、可显示、可移植、可传输表示,以 (左大括号)开始,以 (右大括号)结尾。

【讨论】:

所以你的解决方案确实有效,但我有一个问题,如果你将一个文件传递给你的 rest 调用,为什么它会自动将它转换为 java 端的 InputStream? String 被转换为字节序列,而字节序列又被转换为InputStream 请注意 JSONObject 的 tostring 方法对于非 ascii 字符是不安全的。它不会以 utf-8 编码【参考方案2】:

如果你想要字节,使用这个

json.toString().getBytes()

或者写一个文件savedFile包含json.toString,然后

InputStream fis = new FileInputStream(savedFile);

【讨论】:

以上是关于如何从 JsonObject 创建 InputStream 对象的主要内容,如果未能解决你的问题,请参考以下文章

从 OutputStream 创建 InputStream 的最有效方法

如何快速从jsonObject中删除“(”?

如何从其路径中获取 JSONObject 中的嵌套值?

如何从 NodeJS 中的 JSONObject 获取值?

ANDROID - 如何从 sqlite 字段中分离 JSONObject 值

如何从嵌套的 ArrayList 中获取 JSONObject 的属性并将其显示给 ListView?