Tag: gson

使用GSON反序列化包含JSON的对象

我正在使用gson从JSON表示中反序列化POJO对象。 我希望我的一个POJO中的一个字段包含任意JSON数据。 例如: class B { public String stringField; public JsonObject jsonField; } 我希望能够在以下JSON上调用Gson.fromJson(json, B.class) : { “stringField”: “booger”, “jsonField” : { “arbitraryField1”: “foo” } } 并使得生成的B.jsonField包含一个值为foo的arbitraryField的JsonObject。 但是,当我尝试这样做时, jsonField始终是一个空对象( {} )。 事实上,更一般地说,以下似乎总是返回一个空对象: new Gson().fromJson(“{ foo: 1 }”, JsonObject.class) 我希望上面的内容返回一个包含名为foo的值为1的字段的对象。 在将json反序列化为POJOS时,如何让gson保留任意json数据?

Hibernate和JSON – 是否存在循环依赖的最终解决方案?

在这些日子里,我正在努力使用Hibernate实体和JSON,尽管有很多关于该对象的问题,但我还是无法在存在循环依赖性的情况下进行序列化。 我和Gson和jackson都试过了,但我没有取得很多进展。 这是我的对象的摘录。 这是“父”类。 @Entity public class User extends RecognizedServerEntities implements java.io.Serializable { @Id @GeneratedValue(strategy = IDENTITY) @Column(name = “id”, unique = true, nullable = false) private Integer id; @OneToMany(fetch = FetchType.LAZY, mappedBy = “user”, orphanRemoval = false) @Cascade({CascadeType.SAVE_UPDATE}) private Set threads = new HashSet(0); //…other attributes, getters and setters } 这就是“儿童”课程 @Entity @Table(name = […]

有关于Gson“循环参考”的解决方案吗?

我找到了许多关于Gson循环引用的文章,但我找不到一个优雅的解决方案。 据我所知,一些解决方案是: 将导致循环引用的属性设置为“瞬态”。 使用某些注释排除该属性。 但作为一般性问题,是否有一些解决问题的共同策略?

阻止GSON序列化JSON字符串

我是gson的新手,并且有一些我没有找到答案的新问题,所以请耐心等待。 StackOverflow和谷歌不是我的朋友:( 我有一个java类“User”,其中一个属性“externalProfile”是一个包含已经序列化的JSON的Java String。 当gson序列化User对象时,它会将externalProfile视为原语,从而转义JSON添加额外的斜杠等。我希望gson单独保留字符串,只是“按原样”使用它,因为它已经是有效且可用的JSON。 为了区分JSON字符串,我创建了一个名为JSONString的简单类,我尝试使用reader / writers,registerTypeAdapter,但没有任何作用。 你能帮我吗? public class User { private JSONString externalProfile; public void setExternalProfile(JSONString externalProfile) { this.externalProfile = externalProfile; } } public final class JSONString { private String simpleString; public JSONString(String simpleString) { this.simpleString = simpleString; } } public customJsonBuilder(Object object) { GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(GregorianCalendar.class, new JsonSerializer() […]

如何转换Jackson和Gson之间的日期?

在我们的Spring配置的REST服务器中,我们使用Jackson将对象转换为Json。 该对象包含几个java.util.Date对象。 当我们尝试使用Gson的fromJson方法在Android设备上反序列化它时,我们得到一个“java.text.ParseException:Unparseable date”。 我们已经尝试将日期序列化为自1970年以来相应于毫秒的时间戳,但得到相同的exception。 可以将Gson配置为将时间戳格式的日期(例如1291158000000)解析为java.util.Date对象吗?

如何使用Google Json Parsing API(Gson)解析json中的一些动态字段?

我有一个结构化的Json在某些领域是可变的,我如何使用Gson google json api在Java中正确解析(反序列化)? Json的例子: { type: ‘sometype’, fields: { ‘dynamic-field-1’:[{value: ”, type: ”},…], ‘dynamic-field-2’:[{value: ”, type: ”},…], … } 动态字段将根据发送的结构更改其名称。 有办法吗?

Gson反序列化为地图

我有这个json字符串,我需要将其反序列化为map:Map “players_test”: [ { “54231f85f8e049c7bd8ac0aba3d1caf7”: { “uuid”: “54231f85f8e049c7bd8ac0aba3d1caf7”, “name”: “TomShar”, “signup_time”: “2014-07-04 16:27:16” } }, { “54231f85f8e049c7bd8ac0aba3d1caf7”: { “uuid”: “54231f85f8e049c7bd8ac0aba3d1caf7”, “name”: “TomShar”, “signup_time”: “2014-07-04 16:27:16” } }, { “54231f85f8e049c7bd8ac0aba3d1caf7”: { “uuid”: “54231f85f8e049c7bd8ac0aba3d1caf7”, “name”: “TomShar”, “signup_time”: “2014-07-04 16:27:16” } } ] 所以字符串应该是键,然后值应该是它所代表的对象。 我有一个为UUID对象编写的自定义deseriaziler,并且经过测试和工作(所以这不是问题)。 编辑: 我找到了一个更好的JSON结构,我可以用于我的问题,这完全符合我的要求。 “players”: { “54231f85-f8e0-49c7-bd8a-c0aba3d1caf7”: { “uuid”: “54231f85-f8e0-49c7-bd8a-c0aba3d1caf7”, “name”: “TomShar”, “kills”: 0, “assists”: […]

gson – 序列化任何类型的对象时如何包含类名属性

后来意识到我需要在我的应用程序中序列化对象时将类名称包含为属性。 如果我为序列化的任何非基本对象添加了类名属性,那可能是最好的。 我看到这是Genson中使用useClassMetadata方法的内置function。 但是我已经在我的项目中使用了gson,所以如果我坚持下去就会有所帮助。 这是我目前的尝试: package com.mycompany.javatest; import com.google.gson.*; import java.lang.reflect.*; public class JavaTest { public static class GenericSerializer implements JsonSerializer, JsonDeserializer { private static final String CLASS_PROPERTY_NAME = “class”; @Override public JsonElement serialize(Object src, Type typeOfSrc, JsonSerializationContext context) { JsonElement retValue = context.serialize(src); if (retValue.isJsonObject()) { retValue.getAsJsonObject().addProperty(CLASS_PROPERTY_NAME, src.getClass().getName()); } return retValue; } @Override public […]

将JSON字符串转换为JAVA中的通用对象(使用GSON)

我有一个返回JSON的Api。 响应采用某种格式,可以放入名为ApiResult的对象中,并包含Context 和int Code。 ApiResult以通用方式声明,例如ApiResult 我想知道如何让GSON将传入的JSON字符串转换为ApiResult 到目前为止我有: Type apiResultType = new TypeToken<ApiResult>() { }.getType(); ApiResult result = gson.fromJson(json, apiResultType); 但是这仍然会返回将Context转换为LinkedHashMap(我假设它是GSON回退的)

使用GSon反序列化Map

我有一个包含混合类型的Map,就像这个简单的例子一样 final Map map = new LinkedHashMap(); map.put(“a”, 1); map.put(“b”, “a”); map.put(“c”, 2); final Gson gson = new Gson(); final String string = gson.toJson(map); final Type type = new TypeToken<LinkedHashMap>(){}.getType(); final Map map2 = gson.fromJson(string, type); for (final Entry entry : map2.entrySet()) { System.out.println(entry.getKey() + ” : ” + entry.getValue()); } 我得到的是普通的Object ,没有Integer ,没有String 。 […]