Tag: 反序列化

FlexJSON在反序列化时排除属性

我从Web服务收到JSON响应,但由于各种原因,我不希望在最终响应对象中反序列化某些属性。 例如我有: public class Foo { private String bar; private int baz; //getters & setters } 我回来的JSON响应有两个属性,但在反序列化时我不想设置“bar”。 这样做的原因是他们发送的属性很长,但是我们的是一个String,因此反序列化会抛出IllegalArgumentException。 另一种选择是使用类似json-simple的东西解析JSON,删除我想要的属性,将其转换回JSON并将其传递给反序列化器,但是我想避免这种情况,因为JSON非常大。 有没有办法用ObjectFactory做到这一点?

使用Gson 2.3.1反序列化包含不在Java中工作的接口的Json String

我试图反序列化包含接口类型的接口和hashmaps的json字符串以及使用Gson将包含接口类型的列表放入java对象中。 但我得到了 java.lang.RuntimeException:无法为com.abc.Dummy接口调用no-args构造函数。 使用Gson为此类型注册InstanceCreator可以解决此问题。 我试图通过实例化构造函数来为实例创建者注册类型适配器,以实现具有虚拟值的类,但是虚拟值不会被反序列化的值覆盖? Dummy是接口,SubClassDummy是实现类。 public class DummyInstanceCreator implements InstanceCreator{ @Override public SubClassDummy createInstance(Type type) { return new SubClassDummy(“”, 2.5, “abc”); } } String data = // some json string with interfaces and List, hashmap gsonBuilder.registerTypeAdapter(Dummy.class, new DummyInstanceCreator()); SubClassDummy context = gson.fromJson(data, SubClassDummy.class); 任何人都可以帮助解决这个问题吗? 我无法修改我试图反序列化的java对象。 它是第三方课程 。 因此无法添加任何注释或对该类进行任何修改。 如何让gson用反序列化值覆盖虚拟值? 我甚至无法对java对象如何序列化为json字符串进行任何更改。 我只是将json字符串用于将其反序列化为特定的java对象。

Gson:如何处理可能具有不同类型的字段?

我正在尝试使用Gson反序列化响应。 数据由可以嵌套到任意深度的节点列表组成。 json看起来像这样: { “type”: “node”, “children”: [ { “id”: “abc123”, “name”: “Name 1”, “subdata”: { “type”: “node”, “children”: [ { “id”: “def456”, “name”: “Name 2” } ] } } ] } 现在,没有任何自定义类型适配器,我可以使用以下类: public class Data { private String type; private List nodes; } public class Node { private String id; private String name; private […]

将字段传递给自定义反序列化器类Jackson

我编写了一个自定义反序列化器,只使用jackson映射必需的字段。 开始。 public class GeneralDeserializer extends JsonDeserializer { @Override public GeneralDomain deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { final JsonNode jsonNode = jp.getCodec().readTree(jp); final Map map = new ObjectMapper().convertValue(jsonNode, Map.class); final String event = “Proxy”; return new GeneralDomain(map.get(“id”), event, map.get(“name”), map.get(“lastLogin”)); } @Override public Class handledType() { return GeneralDomain.class; } } 我也有一个mixin类,可以添加额外的注释。 @JsonDeserialize(using = […]

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”: […]

定制jackson解串器获取当前现场类

我正在尝试为jackson编写一个自定义反序列化器,我想让它成为通用的(在任何类型的工作意义上都是通用的,而不是在“generics”中)。 但是我似乎无法弄清楚如何处理被反序列化的字段类型。 例如,我正在寻找以下内容: @Override public MyObject deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { Class c = // do something with that type return new SubclassOfC(somedata based on c); } 这是我一直在努力的当前领域部分的获取类型 。 编辑:这是我感兴趣的java字段的类型。

如何使用Jackson或任何其他api反序列化对象数组?

我有一个模型定义,我需要映射jsonArray。模型如下: @JsonPropertyOrder({ “Command”, “Created”, “Id”, “Image”, “Labels”, “Names”, “Ports”, “Status” }) public class Container { @JsonProperty(“Command”) private String Command; @JsonProperty(“Created”) private long Created; @JsonProperty(“Id”) private String Id; @JsonProperty(“Image”) private String Image; @JsonProperty(“Labels”) private List Labels; @JsonProperty(“Names”) private List Names = new ArrayList(); @JsonProperty(“Ports”) private List Ports = new ArrayList(); @JsonProperty(“Status”) private String Status; //Getters and […]

jackson为一个具有多态类型的字段定制解串器

更新: 我尝试在jackson源代码中调试并在方法中找出它 deserialize(JsonParser jp, DeserializationContext ctxt) SettableBeanProperty.java 当_valueTypeDeserializer不为null时,它将永远不会使用_valueDeserializer 。 这是一个正确的假设,TypeDeserializer应该比ValueDeserializer更合适吗? 我正在尝试使用@JsonDeserialize为具有多态类型的一个字段定义自定义反序列化器。 我可以单独使用@JsonDeserialize和@JsonTypeInfo 。 但是当我一起使用它们时,似乎忽略了@JsonDeserialize注释。 这是我的类层次结构: 1. Definition.java @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = “type”, defaultImpl = Definition.class) @JsonSubTypes({@Type(value = Definition.class, name = “normal”), @Type(value = FormDefinition.class, name = “form”)}) public class Definition { private String name; private String description; // getter&setter for name&description […]

使用Gson或Jackson对JSON进行反序列化时忽略空字段

我知道在将对象序列化为JSON时,有很多关于跳过具有空值的字段的问题。 我想在将JSON反序列化为对象时跳过/忽略具有空值的字段。 考虑一下课程 public class User { Long id = 42L; String name = “John”; } 和JSON字符串 {“id”:1,”name”:null} 做的时候 User user = gson.fromJson(json, User.class) 我希望user.id为’1’, user.name为’John’。 Gson或Jackson是否可以采用一般方式(没有特殊的TypeAdapter或类似的)?

来自Json的Gson反编译generics

在使用Android应用程序时,我遇到了一个问题,当我想制作一个终极通用方法来发送HTTP请求(使用loopj)并反序列化它们(使用Gson)。 正如您在使用gson.fromJson可能知道的gson.fromJson您不能这样做: gson.fromJson(responseBody, new TypeToken() {}.getType()); 要么 gson.fromJson(responseBody, new TypeToken<ArrayList>() {}.getType()) 您已经作为T传递的实际对象(或LinkedTreeMap情况下的实际对象列表)代替了LinkedTreeMap对象(或LinkedTreeMap对象列表)。 如果您仍想要反序列化generics类型对象(-s),请参阅下面的答案。 + Bonus:loopj + gson的终极通用解决方案 感谢这些post的作者和评论者: http://blog.xebia.com/2009/02/07/acessing-generic-types-at-runtime-in-java/ 如何获得通用接口的具体类型 Java Type Generic作为GSON的参数