【问题标题】:Gson library, cast JsonObject to MyObjectGson 库,将 JsonObject 转换为 MyObject
【发布时间】:2013-05-22 13:25:04
【问题描述】:

我目前正在使用此代码从我的服务器中使用 JsonStrings 创建对象:

JsonParser parser = new JsonParser();
JsonObject myJsonObject = (JsonObject) parser.parse(myInputStreamReader);
MyObject myObject = new Gson().fromJson(myJsonObject.toString(), MyObject.class);

这在大多数情况下工作得很好,但有时,对象非常大,因此myJsonObject.toString() 会导致java.lang.OutOfMemoryError。是否有可能将JsonObjects 直接转换为指定的对象而不先将它们转换为字符串?

我已经通过使用StreamReader 而不是String 绕过OutOfMemmoryError 来创建JsonObject,现在我又遇到了完全相同的问题,只是下面几行:/

【问题讨论】:

    标签: java android json casting gson


    【解决方案1】:

    为什么要将 JSON 流解析为 JSON 对象,然后将 JSON 对象转换回字符串,然后再将此字符串转换回 MyObject?只需执行最后一部分,一切都会更快,并且使用更少的内存。

    MyObject myObject = new Gson().fromJson(myInputStreamReader, MyObject.class);
    

    【讨论】:

    • 我编写了一个从我的服务器获取数据的方法,并希望将该 HttpConnection 的所有组件(包括 StreamReader)保留在该方法中。由于有不同的对象,我使用该方法返回一个 JsonObject,然后将 JsonObject 转换为另一个方法中的“MyObject”。坦克为您的建议。如果没有办法转换对象,请更改我的方法以返回 StreamReader 并直接创建 MyObject
    • 那么至少使用fromJson(myJsonObject, MyObject.class)而不将bacj转换为String并强制Gson重新解析。
    • 再次感谢。不知道这是可能的。我以为 fromJson() 只能处理 Streams 或 Strings!
    • 我也不知道,所以我只看了javadoc:google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/…
    猜你喜欢
    • 2016-10-29
    • 2011-07-04
    • 2011-05-05
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多