如何使用jackson将json对象反序列化为集合

时间:2016-04-01 09:02:29

标签: java json jackson

我想像这样反序列化一个json

{
    "0":{"name":"Alice"},
    "1":{"name":"Bob"}
}

到java集合(set或list, not map )。 我想更改CollectionDeserializer的默认行为以支持此功能并将其配置为全局配置。有什么办法吗?

3 个答案:

答案 0 :(得分:1)

如果你真的有这种结构(一个对象作为一个容器而不是一个数组,可以更容易处理):

import com.fasterxml.jackson.databind.*;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws IOException {
        String json = "{\"0\":{\"name\":\"Alice\"}, \"1\":{\"name\":\"Bob\"}}";
        ObjectMapper mapper = new ObjectMapper();
        JsonNode obj = mapper.readValue(json, JsonNode.class);
        Iterator<Map.Entry<String, JsonNode>> userEntries = obj.fields();
        while(userEntries.hasNext()){
            Map.Entry<String, JsonNode> userEntry = userEntries.next();
            System.out.println(userEntry.getKey() + " => " + userEntry.getValue());
        }
    }
}

答案 1 :(得分:1)

您可以使用gson api完成此任务。 代码如下:

String yourJson = "{\"0\":{\"name\":\"Alice\"}, \"1\":{\"name\":\"Bob\"}}";
Gson gson = new Gson();
Type tarType = new TypeToken<Map<String,Map<String,String>>>(){
}.getType(); 
gson.fromJson(yourJson, tarType);

为此您需要添加以下内容: com.google.gson.Gson

答案 2 :(得分:0)

为什么不将您的JSON文档转换为数组:

{"persons":[{"name":"Alice"},{"name":"Bob"}]}

然后定义相应的JSON模式(假设PersonArray是文件名):

{
  "$schema": "http://json-schema.org/draft-04/schema#",  
  "description": "Some description",
  "type" : "object",
  "properties" : {
    "persons" : {
        "type" : "array",
        "items" : { "$ref": "#/definitions/person" }
    }
  },

  "definitions": {
    "person" : {
        "type": "object",
        "description": "A person",
        "properties": {
            "name": { "type": "string" }
        }
    }
  }
}

利用杰出数据绑定API,使用jsonschema2pojo-maven-plugin Maven插件在Java中生成POJO(或者,您可以手动实现POJO)。

生成POJO后,您可以使用ObjectMapper以下列方式反序列化JSON文档:

ObjectMapper mapper = new ObjectMapper();
PersonArray personArray = mapper.readValue(serialisedJsonDocument, PersonArray.class);

JSON文档的元素将存储在PersonArray对象中:

List<Person> persons = new ArrayList<Person>();

如果需要,您还可以向Person对象添加其他属性。