【问题标题】:deserialize arrayList of objects in jakson反序列化jakson中的对象数组列表
【发布时间】:2015-09-05 05:17:10
【问题描述】:

目前面临的一个问题是如何将 json 格式的对象列表反序列化为 pojo。在我使用球衣休息服务的作品中,它可以消耗 json。如何使用具有对象数组的 json 对象反序列化休息请求。

json 数组

{
    "subject": "hi",
    "description": [
        {
            "subject": "hi"
        },
        {
            "subject": "hi"
        }
    ]
}

我的pojo课

public class t {

    private String subject;
    private List<t2> description;

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public List<t2> getDescription() {
        return description;
    }

    public void setDescription(List<t2> description) {
        this.description = description;
    }

}

t2.class

public class t2 {
    private String subject;

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }
}

【问题讨论】:

  • 那么你只是想将一个json字符串转换为java对象吗?
  • 我想你可以在这个类似的问题中找到解决方案:stackoverflow.com/questions/11106379/…
  • 这里的实际问题是什么?该类型和 JSON 似乎兼容,因此您只需声明资源方法采用 t 类型的一个参数即可。

标签: java json jersey jackson


【解决方案1】:

使用TypeReference。例如:

import java.io.IOException;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;


public class JacksonParser {

    public static void main(String[] args) {
        t data = null;
        String json = "{\"subject\":\"hi\",\"description\":[{\"subject\":\"hi\"},{\"subject\":\"hi\"}]}";
        ObjectMapper mapper = new ObjectMapper();
        try {
            data = mapper.readValue(json, new TypeReference<t>() { });
        } catch (JsonParseException e) {
            System.out.println(e.getMessage());
        } catch (JsonMappingException e) {
            System.out.println(e.getMessage());
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        System.out.println(data);
    }

}

【讨论】:

  • 您不需要在那里使用TypeReference,因为t 不是通用的。您可以只使用 `t.class 代替。
猜你喜欢
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多