Articles of jackson

JSON:jackson流解析器 – 它真的值得吗?

我在我正在编写的应用程序中大量使用JSON解析。 我所做的大部分工作已经使用Android内置的JSONObject库实现(是json-lib吗?)。 JSONObject似乎创建了JSON字符串中绝对所有内容的实例……即使我最终没有使用它们。 我的应用程序目前运行得很好,即使在G1上也是如此。 我的问题是:使用像Jackson这样的流解析器的速度和内存优势是否值得一试? 麻烦,我的意思是:据我所知,使用Jackson而不是内置库有三个缺点: 对外部库的依赖。 这会使你的.apk最终更大。 没什么大不了的。 你的应用程序更脆弱。 由于解析不是自动完成的,因此它更容易受到它正在解析的JSON文本的更改(可能我对此错了)。 编写代码以通过流解析器解析JSON是丑陋且乏味的。

使用Proguard时使用jackson-json库的问题

我在Android项目中使用jackson-json库,在使用Proguard进行混淆时导出应用程序时,出现以下错误: Proguard returned with error code 1. See console Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can’t find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can’t find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can’t find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can’t find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can’t find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry You should check if you need to specify additional program jars. […]

使用Proguard在使用Jackson库混淆时使用时出错

在仔细研究了与使用Proguard进行混淆的问题相关的各种问题之后,我已经到了我觉得自己可能是唯一一个遇到这个问题的人。 因此,post。 我有一个相当标准的Android应用程序,它使用基于JSON的REST调用来交换数据。 我利用Jackson库来解析JSON数据。 一切都运行得很完美,直到我们决定使用Proguard为我们的发布版本加入混淆。 在整理出回调相关问题的世界之后,我终于遇到了与jackson图书馆相关的问题。 基本上,行ObjectMapper om = new ObjectMapper() – 只是不起作用! 我一直在该行收到以下错误: Caused by: java.lang.ExceptionInInitializerError at org.codehaus.jackson.map.ObjectMapper.(Unknown Source) … 8 more Caused by: java.lang.NullPointerException at org.codehaus.jackson.map.introspect.VisibilityChecker$Std.(Unknown Source) at org.codehaus.jackson.map.introspect.VisibilityChecker$Std.(Unknown Source) … 9 more 在阅读了许多与包括外部库相关的其他post之后,让proguard忽略jackson库类,打开和关闭优化以及缩小标志,我现在只是无能为力。 为jackson的缘故,我在proguard.cfg文件中包含了各种各样的东西 – -dontskipnonpubliclibraryclassmembers -dontoptimize -dontshrink -libraryjars xtraLibs/joda-time-1.6.2.jar;xtraLibs/xml-apis.jar;xtraLibs/jsr311-api-0.8.jar;xtraLibs/stax2-api-3.0.0.jar;xtraLibs/httpmime-4.0.1.jar 其中,我已经切换了dontoptimize和dontshrink标志。 但是,结果总是一样的。 在我试图解决这个问题的所有时间里,我对Proguard图书馆的努力感到惊讶和敬畏。 只是当事情不起作用时,它们会有点混淆 。 Proguard版本 – 4.6

无法在Spring 3 REST Webservice中的START_ARRAY标记中反序列化对象的实例

我正在利用Spring提供的这个很酷的东西:Spring RESTWebService(spring的版本是3)。 如果我从浏览器访问URL,我可以看到JSON响应,但是从客户端端点(Android应用程序)iIreceive这个错误消息: Caused by: org.springframework.web.client.ResourceAccessException: I/O error: Can not deserialize instance of MyObject out of START_ARRAY token at [Source: org.apache.http.conn.EofSensorInputStream@4076e940; line: 1, column: 1]; nested exception is org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of MyObject out of START_ARRAY token at [Source: org.apache.http.conn.EofSensorInputStream@4076e940; line: 1, column: 1] at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:466) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:414) at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:234) at com.be.android.locateconsultants.resources.AsyncTaskRESTServiceCaller.doInBackground(AsyncTaskRESTServiceCaller.java:43) at […]

@IntDef Android支持与jackson反序列化的公告

使用JacksonAnnotations和Android支持注释。 我的POJO是: @JsonIgnoreProperties(ignoreUnknown = true) public class Schedule { public static final int SUNDAY = 0; public static final int MONDAY = 1; public static final int TUESDAY = 2; public static final int WEDNESDAY = 3; public static final int THURSDAY = 4; public static final int FRIDAY = 5; public static final int […]

如何使用Android Lollipop中的注释在Android Jackson Parsing中修复IncompatibleClassChangeError?

在我们的Android应用程序中,我们在模型中使用Jackson Annotations: @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = “templateType”, visible = true, defaultImpl = Default.class) @JsonSubTypes({ @Type(value = Subclass1.class, name = “tType1”) 我们使用object mapper解析json响应,其中klass是我们希望解析的目标文件的类: getObjectMapper().readValue(json, klass); 在Android Lollipop设备的罕见情况下,我们得到 java.lang.IncompatibleClassChangeError: Couldn’t find com.fasterxml.jackson.annotation.JsonSubTypes$Type.value. 完整堆栈跟踪: com.fasterxml.jackson.annotation.JsonSubTypes$Type.value at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:659) at java.lang.Class.getDeclaredAnnotations(Class.java:891) at com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveClassAnnotations(AnnotatedClass.java:300) at com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector.isIgnorableType(JacksonAnnotationIntrospector.java:103) at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.isIgnorableType(BeanDeserializerFactory.java:844) at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:401) at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:305) at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:151) at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:634) at […]

如何设置Jackson JSON处理器的PROGUARD?

我正在为我的app使用Jackson JSON处理器。包括这个使用 compile ‘com.fasterxml.jackson.core:jackson-databind:2.4.2’ compile ‘com.fasterxml.jackson.core:jackson-annotations:2.4.2’. 我的proguard配置是。 ## BEGIN — Google Play Services proguard.txt -keep class * extends java.util.ListResourceBundle { protected java.lang.Object[][] getContents(); } # Keep SafeParcelable value, needed for reflection. This is required to support backwards # compatibility of some classes. -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; } # Keep […]

jackson JsonParseException:无效的UTF-8中间字节

当jackson引擎尝试解析来自服务器的json响应时,会发生此错误。 我使用Spring Android来串行/反序列化json中的对象。 此问题似乎与默认编码UTF-8有关。 有人知道如何告诉引擎它应该期待与UTF-8不同的东西,如UTF-16吗? HttpHeaders requestHeaders = createSomeHeader(); RestTemplate restTemplate = new RestTemplate(); HttpEntity requestEntity = new HttpEntity(requestHeaders); String url = “someurl” ResponseEntity arrayResponseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, MyObject[].class); 错误日志: Caused by: org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Invalid UTF-8 middle byte 0x20 at [Source: org.apache.http.conn.EofSensorInputStream@44d397b0; line: 92, column: 42]; nested exception is org.codehaus.jackson.JsonParseException: Invalid […]

从响应中获取标头(Retrofit / OkHttp客户端)

我正在使用OkHttp客户端和Jackson的Retrofit进行Json序列化,并希望得到响应的标题。 我知道我可以扩展OkClient并拦截它。 但这是在反序列化过程开始之前。 我基本上需要的是将标题与反序列化的Json对象一起使用。

使用从Jackson创建的对象在Android上使用OrmLite保存子集合

我有一个REST服务,我正在从我的应用程序调用,它将一个JSON对象作为byte[]引入,然后将其转换为一个漂亮的嵌套对象集合 – 所有这些都可以正常工作。 我当时想要做的是使用OrmLite将这些对象持久化到SQLite存储,这就是事情开始崩溃的地方,因为据我所知,OrmLite不会自动持久化嵌套对象。 为简单起见,让我们删除我的实际function,并让我的对象简单地建模如下: @DatabaseTable(tableName = “parents”) public class Parent { @DatabaseField(id=true) private String name; @ForeignCollectionField // have to use Collection here because needs to be compatible with Jackson private Collection children; /* Getters and setters go here */ } @DatabaseTable(tableName = “children”) public class Child { @DatabaseField(id=true) private String name; @DatabaseField(foreign=true) private Parent […]