Tag: jackson

在jackon JSON库中ALLOW_UNQUOTED_FIELD_NAMES

我正在使用jackson库对JSON进行序列化/反序列化。 我需要这个JSON具有尽可能小的尺寸,所以我启用了ALLOW_UNQUOTED_FIELD_NAMESfunction来消除所有引号。 我知道删除引号不是标准的json,但是使json变小是项目的一项硬性要求。 生成的json有效,但是当我尝试读取json值时,我得到一个exception: org.codehaus.jackson.JsonParseException:意外的字符(’9’(代码57)):期望有效的名称字符(对于不带引号的名称)或双引号(对于引用)在[Source:java.io]处启动字段名称.StringReader @ 1347d75; line:1,column:3] 当我读到这个json时抛出上面的exception: {90110a2e-febd-470f-afa4-cf7e890d31b9:0,eec652ad-a4d9-4eb1-8d24-7c1a0c29449f:1} 我读它的方式是: Map valuesMap = oM.readValue(json, new TypeReference<Map>() {}); 我用它来读取和写入值的对象映射器是: private static final ObjectMapper om = new ObjectMapper(); static { om.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false); om.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, true); om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); om.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL); } 我在发送者和接收者项目中都使用了Jackson的1.6.3版本。 这个function所需的版本是1.2+所以我想也许我没有使用这个版本,但我的接收器是一个Spring应用程序,我检查了libs文件夹中安装的库是1.6.3。 我可能做错了什么? 也许此function不能与地图一起使用。 我有另一个问题,到目前为止我只是发送一个地图,其中键只是一个uuid值,值是一个数字。 如果我发送带有ALLOW_UNQUOTED_FIELD_NAMESfunction的特殊字符的值,可能会有任何问题吗? jackson会逃脱这个角色吗? 谢谢。

使用Jackson API和JAXB Annotations将JSON转换为XML,反之亦然

我正在尝试编写一个代码,它可以分别使用XML或JSON输入并输出JSON或XML。 即,如果我给XML它应该给回JSON,如果我给JSON它应该给XML输出。 我被告知使用Jackson API和JAXB Annotations可以实现这一点。 任何人都可以帮我解决这个问题吗?

在java中使用jackson json反序列化时忽略缺少的属性

在这个例子中 Class Person{ String name; int age; } 如果json对象缺少属性’age’, { name : John } Person person = objectMapper.readValue(jsonFileReader, Person.class); 它抛出一个JsonMappingException,说它不能反序列化。 是否有注释在反序列化期间忽略缺少的字段? 谢谢

迫使jackson反序列化为特定的原始类型

我使用Jackson 1.8.3将以下域对象序列化和反序列化为JSON public class Node { private String key; private Object value; private List children = new ArrayList(); /* getters and setters omitted for brevity */ } 然后使用以下代码对对象进行序列化和反序列化 ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(destination, rootNode); 然后用反序列化 mapper.readValue(destination, Node.class); 对象的原始值是Strings,Doubles,Longs或Booleans。 但是,在序列化和反序列化期间,Jackson将Long值(例如4)转换为Integers。 我如何“强制”jackson将数字非十进制值反序列化为Long而不是Integer?

如何在循环引用中使用@JsonIdentityInfo?

我正在尝试使用Jackson 2中的@JsonIdentityInfo,如此处所述。 出于测试目的,我创建了以下两个类: public class A { private B b; // constructor(s) and getter/setter omitted } public class B { private A a; // see above } 当然,天真的方法很糟糕: @Test public void testJacksonJr() throws Exception { A a = new A(); B b = new B(a); a.setB(b); String s = JSON.std.asString(a);// throws StackOverflowError Assert.assertEquals(“{\”@id\”:1,\”b\”:{\”@id\”:2,\”a\”:1}}”, s); } […]

如何获得精美打印的JSON代码的紧凑forms?

如何让Jackson的build()方法打印出JSON输出呢? 这是一个漂亮打印丑陋forms的JSON代码的示例。 我需要使用JSON代码的漂亮版本然后将其转移到丑陋的fom。 如何做呢? 我需要转换这个: { “one” : “AAA”, “two” : [ “BBB”, “CCC” ], “three” : { “four” : “DDD”, “five” : [ “EEE”, “FFF” ] } } 对此: {“one”:”AAA”,”two”:[“BBB”,”CCC”],”three”:{“four”:”DDD”,”five”:[“EEE”,”FFF”]}} 我试图删除’\ n’,’\ t’和”字符; 但是值中可能有一些这样的字符,所以我不能这样做。 还有什么可以做的?

Jackson ObjectMapper无法反序列化POJO,抛出exception:没有为类型找到合适的构造函数:无法从JSON对象实例化

我试图测试以下代码但没有成功: class TestClass { private class ND2Customer { public String name; public String description; public String email; public Boolean multiuser; public String dnszone; public String uri; public String type; public ND2Customer() { } } @Test public void TestJackson() throws JsonParseException, JsonMappingException, IOException { String json=”{\”description\”: \”test1u\”, \”dnszone\”: \”test1.public.sevenltest.example.com.\”, \”uri\”: \”http://199.127.129.69/customer/test1\”, \”multiuser\”: true, \”type\”: \”2.0.3-3146\”, \”email\”: […]

jackson杰森类型映射内部类

我正在尝试为作为JSON传入的对象创建内部类类型,但是虽然我已经阅读了这里以及Jackson的网站,但我似乎无法获得正确的组合,所以如果其他人有任何指针他们会非常感激。 我在下面发布了一些片段并删除了所有的getter和setter,我没想到他们需要发帖。 我正在使用Jackson 2.2。 我试图反序列化的类: public class Settings { private int offset; private int limit; private String type; private Map criteria; public class Criteria { private String restriction; private Object value; } } 我用来反序列化的代码: ObjectMapper om = new ObjectMapper(); TypeFactory tf = om.getTypeFactory(); JavaType map = tf.constructMapLikeType( Map.class, String.class, Criteria.class ); JavaType type = typeFactory.constructType( […]

Json Mapping Exception无法反序列化START_ARRAY令牌中的实例

我正在尝试将我的json请求解析为我的模型。 我不知道这段代码有什么问题。 json的语法在Java模型上看起来也是正确的和注释。 我不知道为什么我会收到如下错误: Caused by: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of ParametersType out of START_ARRAY token (through reference chain: Document[“parameters”]) Java模型: @JsonIgnoreProperties( ignoreUnknown = true ) public class Document { @XmlElement( required = true ) @JsonProperty( “templateId” ) protected String templateId; @JsonProperty( “parameters” ) @XmlElement( required = true ) protected ParametersType parameters; @JsonProperty( “documentFormat” […]

在Jackson中映射动态json对象字段?

我在以下架构中有json对象: { name: “foo”, timestamp: 1475840608763, payload: { foo: “bar” } } 这里, payload字段包含一个嵌入的json对象,该对象的模式是动态的,每次都不同。 payload对象是从不同API服务获得的原始输出,以及不同API服务的不同方法。 无法将其映射到所有可能的值。 是否可以拥有一个java类,如下所示: public class Event { public String name; public long timestamp; public JsonObject payload; } 或者沿着那些方向的东西,所以我可以接收基本模式并处理它,然后将它发送到相关的类,它将payload转换为适当的预期类?