Tag: gson

如何从GSON解析中确定对象类?

我正在从字节数组中解析JSON字符串并将其作为对象进行转换。 如何确定对象的类? Object objDeserialized = gson.fromJson(jsonFromString, Object.class); //It could be type Message or RoomDetail

可以用json中的json值填充当前对象吗?

我想在对象构造函数中用Json中的值填充对象字段。 public AbstractObject(String jsonSerializedObject) { Gson gson = new Gson(); // Fill object values from json in *current* object } 这可能吗?

通过使用Gson.fromJson()方法将json解析为类模型是行不通的

我的问题是,我不能通过使用Gson.fromJson()方法解析json到class 模型。 在我的PageOutput.java中 public class PageOutput { @SerializedName(“TotalItemCount”) public int totalItemCount; @SerializedName(“Items”) private T[] items; public final T[] getItems() { return items; } } 在Property.java中 public class Property { @SerializedName(“Id”) public String id; @SerializedName(“Title”) public String title; @SerializedName(“Price”) public BigDecimal price; …. } 在Main.java中 , PageOutput output = new Gson.fromJson(jsonString, new TypeToken<PageOutput>(){}.getType()); 编译项目时,我在Items中得到null。 但是当我使用时 PageOutput […]

gson:根据类型从json参数化

对不起它肯定已被问到,但我找不到我需要的东西 我有几种消息类型: class AbstractMessage { int code; String token; } class ShareMessage extends AbstractMessage{ String user; Map friends; } class PostMessage extends AbstractMessage{ String user; Map data; } 以及从json post消息中解码它们的方法: public Object getMessage(BufferedReader r, Type t){ Object o = null; try{ o = g.fromJson(r, t); } catch (final JsonSyntaxException e) { LOGGER.info(“Error in Json format”, […]

使用GSON加载非常重的流

我正在尝试读取非常繁重的JSON(超过6000个对象)并将它们存储在哈希映射中以便稍后将其插入到我的数据库中。 但问题是我面对OOM,这是因为我的JSON很重要,但是GSON库应该让我摆脱这种局面,但事实并非如此! 有任何想法吗? public Map readJsonStream(InputStream in) throws IOException { JsonReader reader = new JsonReader(new InputStreamReader(in, “UTF-8”)); Map contentMap = new HashMap(); Gson mGson = new Gson(); contentMap = mGson.fromJson(reader, contentMap.getClass()); reader.close(); return contentMap; }

如何在没有太多引号的情况下序列化JsonObject?

我在com.google.gson.JsonObject上写了一个小的流畅包装器。 当我序列化我的Json时,我得到: {“key1″:”value1″,”key2″:”value2″,”key3″:”{\”innerKey\”:\”value3\”}”} 如何摆脱多余的报价? 我的代码: public class JsonBuilder { private final JsonObject json = new JsonObject(); private final Map children = newHashMap(); public String toJson() { for (Map.Entry entry : children.entrySet()) { String value = entry.getValue().toJson(); add(entry.getKey(), value); } children.clear(); return json.toString(); } public JsonBuilder add(String key, String value) { json.addProperty(key, value); return this; } […]

在Java中处理REST结果(json)中的不一致数据类型

我是新手,并试图在Android Studio的setlist.fm上使用Rest API,但是在将我的GET请求结果放入我的Java数据模型时遇到了一些问题。 特别是,我将“集合”(“集合”是指在​​音乐会上演奏的集合)建模为Java类。 但通常情况下,我从我的HTTP请求中得到结果,这些请求已“设置”为空字符串甚至数组。 我将使用以下所有Radiohead设置列表的GET请求作为示例: http : //api.setlist.fm/rest/0.1/artist/a74b1b7f-71a5-4011-9441-d0b5e4122711/setlists.json 请注意,在大多数情况下,“集合”是一个对象。 但在某些情况下,它是一个字符串 。 在其他情况下,它是一个数组 。 当我尝试使用以下代码行将gson解析为我的数据模型时,我的Android Studio给出了以下错误: gson.fromJson(result.toString(),Response.class); 它似乎在一个实例上失败,其中“sets”显示为空字符串而不是对象: Expected BEGIN_OBJECT but was STRING at line 1 column 942 path $.setlists.setlist[0].sets 有没有人有关于如何处理这类事情的建议? 我已经注意到了迄今为​​止我所看过的所有艺术家。 谢谢!

使用GSON JsonReader处理大字段的最佳方法

我得到了一个java.lang.OutOfMemoryError:Java堆空间,即使使用GSON Streaming也是如此。 {“result”:”OK”,”base64″:”JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC….”} base64最长可达200​​Mb。 GSON占用的内存要多得多,(3GB)当我尝试将base64存储在一个变量中时,我得到一个: Exception in thread “main” java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2367) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130) at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:535) at java.lang.StringBuilder.append(StringBuilder.java:204) at com.google.gson.stream.JsonReader.nextQuotedValue(JsonReader.java:1014) at com.google.gson.stream.JsonReader.nextString(JsonReader.java:815) 处理这种领域的最佳方法是什么?

如何使用Gson反序列化ConcurrentMap

我试图反序列化一个具有ConcurrentMap的对象,但我得到一个例外。 Caused by: java.lang.IllegalArgumentException: Can not set java.util.concurrent.ConcurrentMap field com.example.Row.doubleValues to java.util.LinkedHashMap 我的函数看起来像这样: T deserialise(final InputStream input, final Class type) { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); InputStreamReader isr = new InputStreamReader(input); return gson.fromJson(isr, type); } 如何让它正确地反序列化地图? 我需要提供自定义解串器吗? 请注意,我在同一个类中有常规Maps和ConcurrentMaps 。 我也是序列化类的人,因此,如果我可以提供一个指定并发映射类型的自定义序列化程序,然后是一个反序列化器,它指定应该如何创建那些应该工作的对象。 更新 :我反序列化的类看起来像这样: public class Row implements Serializable { private static final […]

检查文件是否为json,java

使用Java有一种简单的方法来检查给定文件是否符合json格式? 使用gson,我能做的最好的事情是: private final JsonParser parser = new JsonParser(); jsonElement = parser.parse(new FileReader(fileName)); if (jsonElement.isJsonObject()) { return true; } else { return false; } 任何更干净的想法