标签: fasterxml

将 ArrayList 内的对象序列化为 XML 时丢失类型元素

我在使用 Jackson 序列化为 XML 时似乎遇到了问题。我的代码如下:

测试容器

package com.test;

import java.util.ArrayList;

import com.fasterxml.jackson.annotation.JsonProperty;

public class TestContainer {

    private String testContainerID;
    private String testContainerMessage;
    private ArrayList<TestChild> testContainerChildren;

    @JsonProperty("TestContainerID")
    public String getTestContainerID() {
        return testContainerID;
    }

    @JsonProperty("TestContainerID")
    public void setTestContainerID(String testContainerID) {
        this.testContainerID = testContainerID;
    }

    @JsonProperty("TestContainerMessage")
    public String getTestContainerMessage() {
        return testContainerMessage;
    }

    @JsonProperty("TestContainerMessage")
    public void setTestContainerMessage(String testContainerMessage) {
        this.testContainerMessage = testContainerMessage;
    }

    @JsonProperty("TestContainerChildren")
    public ArrayList<TestChild> getTestContainerChildren() {
        return testContainerChildren;
    }

    @JsonProperty("TestContainerChildren")
    public void setTestContainerChildren(ArrayList<TestChild> testContainerChildren) {
        this.testContainerChildren = testContainerChildren;
    }

} …
Run Code Online (Sandbox Code Playgroud)

xml-serialization jackson fasterxml json-deserialization

5
推荐指数
1
解决办法
3800
查看次数

如何使用FasterXML解析来自json的对列表

假设我有以下Java类:

import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Demo {
    public int x;
    public int y;
    public List<Pair<Integer, Integer>> the_list;
}
Run Code Online (Sandbox Code Playgroud)

我想从以下json格式填充它:

{ "x" : 1,  
  "y" : 2, 
  "the_list" : [[1,2],[3,4]]}
Run Code Online (Sandbox Code Playgroud)

使用更快的xml

ObjectMapper mapper = new ObjectMapper();
Run Code Online (Sandbox Code Playgroud)

我可以在那里调用mapper.readTree(json)并填写我需要的一切.问题是我拥有的实际类(不是Demo)包含很多参数,我想从数据绑定功能中受益.

尝试平原:

mapper.readValue(json, Demo.class)
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of     
org.apache.commons.lang3.tuple.Pair, problem: abstract types either need to be mapped to 
concrete types, have custom deserializer, or be instantiated with additional type   
information
Run Code Online (Sandbox Code Playgroud)

有没有办法将自定义解析与数据绑定混合?我查看了注释,但没有找到任何适合该目的的东西(我无法使用mixins来处理泛型,没有调用the_list的自定义setter可能是因为它是一个列表,JsonCreator不是一个选项,因为我没有写Pair类......).

java json jackson fasterxml

5
推荐指数
1
解决办法
4255
查看次数

Json(fasterxml)stackoverflow异常

尝试序列化类别时,我得到一个stackoverflow.

例外

警告:StandardWrapperValve [dispatcher]:Servlet调度程序的Servlet.service()在java.lang.ClassLoader.defineClass(ClassLoader.java:760)的java.lang.ClassLoader.defineClass1(本机方法)中抛出异常java.lang.StackOverflowError at org.apache.felix.framework.BundleWiringImpl $ BundleClassLoader.findClass(BundleWiringImpl.java:2279)位于org.apache.felix.framework.BundleWiringImpl的org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1501).在com.fasterxml的java.lang.ClassLoader.loadClass(ClassLoader.java:357)的org.apache.felix.framework.BundleWiringImpl $ BundleClassLoader.loadClass(BundleWiringImpl.java:1955)访问$ 400(BundleWiringImpl.java:75). com的jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:660).quickxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)位于com.fasterxml.jackson.databind的com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:100). ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:21)位于com.fasterxml.jackson.databind.ser.BeanPropertyWriter的com.fasterxml.jackson.databind.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:183). serializeAsField(BeanPropertyWriter.java:541)位于com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:644)的com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java: 152)databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:100)位于com.fasterxml.jackson.databind.ser的com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:21). std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:183)位于com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:541)的com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields( BeanSerializerBase.java:644)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:100)位于com.fasterxml.jackson.databind.ser的com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:21). std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:183)位于com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:541)的com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields( BeanSerializerBase.java:644)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)quickxml.jackson.databind.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:183)at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:541)at com.fasterxml.jackson.databind. ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:644)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)quickxml.jackson.databind.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:183)at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:541)at com.fasterxml.jackson.databind. ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:644)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)

Category.java

@Entity
public class Category implements DataObject, Serializable {

    @Id
    @GeneratedValue 
    private Long id;
    private String title;
    private String description;

    @ManyToOne @JsonIgnore 
    private Category parent;


@Override
public long getId() {
    return id;
}

@Override
public void setId(long id) {
    this.id = id;
}

public String getTitle() {
    return title;
}

public …
Run Code Online (Sandbox Code Playgroud)

java data-binding spring json fasterxml

5
推荐指数
3
解决办法
1万
查看次数

没有single-int-arg构造函数/工厂方法

我有这个代码:

final Person p = new Person(1L);
final ObjectMapper mapper = JacksonUtil.INSTANCE.getMapper();
final TypeReference<HashMap<String, Object>> typeMap = new TypeReference<HashMap<String, Object>>() {};
final String personJson= mapper.writeValueAsString(p);
mapper.readValue(personJson, typeMap);
Run Code Online (Sandbox Code Playgroud)

personJson 就好像:

"id" : 1
Run Code Online (Sandbox Code Playgroud)

每当我Long type在我的Json中有一个,当我尝试阅读它时它不起作用.我有这个错误:

com.fasterxml.jackson.databind.JsonMappingException:无法从Integral编号实例化类型[simple type,class org.codehaus.jackson.generated.java.lang.Number]的值; 没有single-int-arg构造函数/工厂方法

我该如何让它接受这种类型Long?是否在映射器中启用了任何功能?

jackson fasterxml

5
推荐指数
1
解决办法
1万
查看次数

fastxml(jackson-dataformat-xml) 和 Woodstox 之间有什么关系?

如果我的问题无效,我很抱歉,但想知道 fastxml(jackson-dataformat-xml) 和 Woodstox 之间的关系是什么。文档(https://github.com/FasterXML/jackson-dataformat-xml)建议我在使用 jackson-dataformat-xml 时添加 Woodstox 的 Maven 依赖项。

xml-parsing fasterxml

5
推荐指数
1
解决办法
1275
查看次数

使用Jackson进行反序列化时,将一些JSON字段保留为String

我使用com.fasterxml.jackson.databind改造,以处理来自服务器在我的Android应用程序的响应.

由于JSONObject响应太复杂并且包含很多JSONArray,我希望能够将其中一些数组字段解析为String,而不是为这些Array可能包含的每个子对象创建POJO.

有没有办法告诉杰克逊将这些字段保留为字符串而不是将它们解析为实体?

android json jackson fasterxml retrofit2

5
推荐指数
0
解决办法
444
查看次数

ZonedDateTime 使用 FasterXML Jackson 序列化纪元毫秒

我打算使用纪元毫秒进行反序列化和序列化。然而,只有反序列化有效,但未能序列化回正确的ZonedDateTime.

ObjectMapper mapper = new ObjectMapper();
mapper.setTimeZone(TimeZone.getDefault());
mapper.registerModule(new JavaTimeModule());
mapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false);

System.out.println(mapper.writeValueAsString(ZonedDateTime.now()));  // print 1493703996728 [Expected]
System.out.println(mapper.readValue("1493703996728", ZonedDateTime.class)); // print +49303-08-07T00:52:08+08:00[Asia/Singapore] [Unexpected]
Run Code Online (Sandbox Code Playgroud)

如何使序列化以获取日期2017-05-02T13:46:36.728+08:00[Asia/Singapore]

com.fasterxml.jackson.* 的版本都是 2.8.8

java jackson java-8 fasterxml zoneddatetime

5
推荐指数
1
解决办法
1534
查看次数

Gradle导入com.fasterxml.jackson.datatype无法解析

导入com.fasterxml.jackson.datatype无法解析

如屏幕截图所示,无法解析 import com.fasterxml.jackson.datatype 。

我已经在 build.gradle 中导入了 jackson-datatype-jsr310', version: '2.9.3,如下所示,

buildscript {
    ext {
        springBootVersion = '1.5.9.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.linkedin.learning'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-web')
    runtime('com.h2database:h2')
    testCompile('org.springframework.boot:spring-boot-starter-test')

    // https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310
compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.9.3'


}
Run Code Online (Sandbox Code Playgroud)

最后几行来自 Maven Repo:https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.9.3

我想用的是

com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
Run Code Online (Sandbox Code Playgroud)

但是,即使是 com.fasterxml.jackson.datatype 也无法正确导入。

为了解决这个问题,我尝试在 build.gradle 中添加更多依赖项,正如这篇文章所建议的

Jackson 无法访问 …

java spring gradle jackson fasterxml

5
推荐指数
0
解决办法
8323
查看次数

读取一个巨大的对象 json 数组文件

我有一个很大的 json 文件,大小约为 40Gb。当我尝试将此对象数组文件转换为 java 对象列表时,它崩溃了。我已经使用了最大堆的所有大小xmx,但没有任何效果!

public Set<Interlocutor> readJsonInterlocutorsToPersist() {
    String userHome = System.getProperty(USER_HOME);
    log.debug("Read file interlocutors "+userHome);
    try {
        ObjectMapper mapper = new ObjectMapper();
        // JSON file to Java object
        Set<Interlocutor> interlocutorDeEntities = mapper.readValue(
                new File(userHome + INTERLOCUTORS_TO_PERSIST),
                new TypeReference<Set<Interlocutor>>() {
                });
        return interlocutorDeEntities;
    } catch (Exception e) {
        log.error("Exception while Reading InterlocutorsToPersist file.",
                e.getMessage());
        return null;
    }
} 
Run Code Online (Sandbox Code Playgroud)

有没有办法使用读取此文件BufferedReader,然后逐个对象推送?

java jackson fasterxml

5
推荐指数
1
解决办法
4999
查看次数

Apache 公共 MultiValuedMap 和 Jackson

我想序列化/反序列化 MultiValuedMap<String,Object>。很难相信 www 中没有示例代码。有谁知道一个例子吗?

这是我的代码片段 import org.apache.commons.collections4.MultiValuedMap;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;

public class MultiValuedMapSerializer extends StdSerializer<MultiValuedMap<String,Object>> {
  private static final long serialVersionUID = 1L;

  public MultiValuedMapSerializer() {
    this(null);
  }

  protected MultiValuedMapSerializer(Class<MultiValuedMap<String,Object>> klass) {
    super(klass);
  }

  @Override
  public void serialize(MultiValuedMap<String,Object> value, JsonGenerator gen, SerializerProvider provider) throws IOException {
    gen.writeStartObject();
    for (Entry<String, Object> entry : value.entries()) {
      if(entry.getValue() instanceOf MultiValuedMap){
        @SuppressWarnings("unchecked")
        MultiValuedMap<String, Object> map = (MultiValuedMap<String, Object>) value;
        if (key != null) {
          gen.writeFieldName(key);
          serialize(map, gen, provider);
        } else { …
Run Code Online (Sandbox Code Playgroud)

java apache-commons jackson fasterxml

5
推荐指数
1
解决办法
1537
查看次数