Tag: jackson

使用Jackson序列化/反序列化Map

我有一个类似于以下的类 public class MyClass { private String val1; private String val2; private Map context; // Appropriate accessors removed for brevity. … } 我希望能够与jackson一起往返于JSON并返回。 我可以将对象序列化为精细并接收以下输出: { “val1”: “foo”, “val2”: “bar”, “context”: { “key1”: “enumValue1”, “key2”: “stringValue1”, “key3”: 3.0 } } 我遇到的问题是,由于序列化映射中的值没有任何类型信息,因此它们不会正确反序列化。 例如,在上面的示例中,enumValue1应该反序列化为枚举值,而是反序列化为String。 我已经看到了基于各种类型的类型的示例,但在我的场景中,我不知道类型是什么(它们将是用户生成的对象,我不会事先知道)所以我需要成为能够使用键值对序列化类型信息。 我怎样才能与jackson达成这个目标? 为了记录,我使用Jackson版本2.4.2。 我用来测试往返的代码如下: @Test @SuppressWarnings(“unchecked”) public void testJsonSerialization() throws Exception { // Get […]

Jsonpath与Jackson或Gson

我得到一个大的json文档,我想只解析它的一部分到我的java类。 我正在考虑使用类似jsonpath的东西从中提取部分数据,而不是创建整个java类的层次结构。 Jackson或Gson是否以任何方式支持jsonpath? 如果是,您可以为我提供一些示例或指向另一个标准库吗? 例如,假设我有一个下面的文档,我想在我的java类中仅提取它下面的数据: $ .store.book [0] – 只有第一本书$ .store.bicycle.price – 自行车的价格 { “store”: { “book”: [ { “category”: “reference”, “author”: “Nigel Rees”, “title”: “Sayings of the Century”, “price”: 8.95 }, { “category”: “fiction”, “author”: “Evelyn Waugh”, “title”: “Sword of Honour”, “price”: 12.99 }, { “category”: “fiction”, “author”: “Herman Melville”, “title”: “Moby Dick”, “isbn”: […]

Spring 3.2和Jackson 2:添加自定义对象映射器

我正在Spring MVC中开发一个REST Web服务。 我需要改变jackson2序列化mongodb objectids的方式。 我不知道该怎么办,因为我找到了jackson 2的部分文档,我做的是创建一个自定义序列化器: public class ObjectIdSerializer extends JsonSerializer { @Override public void serialize(ObjectId value, JsonGenerator jsonGen, SerializerProvider provider) throws IOException, JsonProcessingException { jsonGen.writeString(value.toString()); } } 创建一个ObjectMapper public class CustomObjectMapper extends ObjectMapper { public CustomObjectMapper() { SimpleModule module = new SimpleModule(“ObjectIdmodule”); module.addSerializer(ObjectId.class, new ObjectIdSerializer()); this.registerModule(module); } } 然后注册映射器 我的CustomConverter永远不会被调用。 我认为CustomObjectMapper定义是错误的,我从jackson 1.x的一些代码改编它 在我的控制器中,我正在使用@ResponseBody。 […]

如何将List包装为Jackson生成的JSON中的顶级元素

我遇到了一个问题,我试图将List包含为根节点,但我似乎无法得到它。 让我解释。 假设我们有一个类“TestClass” class TestClass{ String propertyA; } 现在,在一些实用方法中,这就是我所做的 String utilityMethod(){ List list = someService.getList(); new ObjectMapper().writeValueAsString(list); } 我试图用JSON获得的输出是 {“ListOfTestClasses”:[{“propertyA”:”propertyAValue”},{“propertyA”:”someOtherPropertyValue”}]} 我试过用 objMapper.getSerializationConfig().set(Feature.WRAP_ROOT_VALUE, true); 但是,我似乎仍然没有做对。 现在,我只是创建一个Map ,我写这个来实现我想要做的事情,但这很有效但很明显这是一个黑客。 有人可以帮我一个更优雅的解决方案吗? 谢谢

用Jackson反序列化JSON – 为什么JsonMappingException“没有合适的构造函数”?

我在使用Jackson反序列化JSON字符串时遇到问题(但我将对象序列化为JSON没有问题)。 下面我介绍我使用的课程。 当我接收一个JSON字符串(一个在其他地方序列化并通过webservice检索的ProtocolContainer)并想要反序列化它时,问题出现了: JSON字符串: { “DataPacketJSONString”:NULL, “DataPacketType”: “MyPackage.DataPackets.LoginRequestReply”, “的MessageId”:6604, “SenderUsername”:NULL, “子分组”:{ “__类型”: “LoginRequestReply:#MyPackage.DataPackets”,”原因“:”错误的通行证或用户名“,”成功“:false,”用户名“:”用户1“}} 我试着像这样反序列化: ProtocolContainer ret = ProtocolContainer.Create(jsonString); 并且可以在下面看到在ProtocolContainer中执行的代码。 例外: org.codehaus.jackson.map.JsonMappingException:找不到类型[simple type,class MyPackage.ProtocolContainer]的合​​适构造函数:无法在[Source:java.io.]中从JSON对象实例化(需要添加/启用类型信息?)。 StringReader @ 4059dcb0; line:1,column:2] 我真的很感激这里的一些输入=)Thx! ProtocolContainer.java – 封装我的“SubPackets”的容器类: import java.io.IOException; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import MyPackage.DataPackets.*; public class ProtocolContainer { public String SenderUsername; public String DataPacketType; public long […]

如何通过jackson的注释定义通用列表反序列化器?

假设我有一个具有列表属性的对象: public class Citizen { name List tickets List fines } 我想通过注释为列表定义一个通用的自定义反序列化器: public class Citizen { … @JsonDeserializer(MyListDeserializer) // <– generic deserializer public void setTickets(List tickets) { this.tickets = tickets; } @JsonDeserializer(MyListDeserializer) // <– how can I do that? public void setFines(List fines) { this.fines = fines; } } 我正在寻找一种方法来创建一个“通用”反序列化器 – 一个能够反序列化两种类型的列表,类似于ContextualDeserializer,用于将JSON映射到与Jackson不同类型的地图 。 最后的目的是在MyListDeserializer实现自定义反序列化逻辑,以将空字符串””反序列化为空列表,但我想了解一般方法,而不仅仅是空字符串。

jackson反序列化json到java-objects

这是我的Java代码,用于反序列化,我试图将json字符串转换为java对象。 这样做我使用了以下代码: package ex1jackson; import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; public class Ex1jackson { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); try { String userDataJSON = “[{\”id\”:\”value11\”,\”name\”: \”value12\”,\”qty\”:\”value13\”},” + “{\”id\”: \”value21\”,\”name\”:\”value22\”,\”qty\”: \”value23\”}]”; product userFromJSON = mapper.readValue(userDataJSON, product.class); System.out.println(userFromJSON); } catch (JsonGenerationException e) { System.out.println(e); } catch (JsonMappingException e) { […]

jackson反序列化对象或数组

我有jackson的问题。 有没有办法反序列化可能有两种类型的属性,对于某些对象,它看起来像这样 “someObj” : { “obj1” : 5, etc….} 那么对于其他人来说,它看起来像一个空数组,即 “someObj” : [] 任何帮助表示赞赏! 谢谢!

spring:从控制器返回JSON作为ModelAndVIew

如何从Spring控制器返回JSON作为视图或ModelAndView ? 我对使用@ResponseBody注释不感兴趣。 有没有其他方法这样做?

如何在自定义序列化程序中访问默认的jackson序列化

我想创建一个自定义序列化程序,它可以完成一些工作,然后将其余部分用于默认序列化。 例如: @JsonSerialize(using = MyClassSerializer.class) public class MyClass { … } public class MyClassSerializer extends JsonSerializer { @Override public void serialize(MyClass myClass, JsonGenerator generator, SerializerProvider provider) throws JsonGenerationException, IOException { if (myClass.getSomeProperty() == someCalculationResult) { provider.setAttribute(“special”, true); } generator.writeObject(myClass); } } 有了为聚合对象创建其他自定义序列化程序的想法,这些对象基于’speical’属性值表现不同。 但是,上面的代码不起作用,因为毫不奇怪的是进入无限递归。 有没有办法告诉jackson在设置属性后使用默认序列化? 我真的不想枚举像许多自定义序列化程序一样的所有属性,因为类相当复杂,我不想每次更改类时都要对序列化程序进行双重维护。