2017-08-14 20 views
0

比方說你有一個JSON數組,如下所示:如何使用傑克遜馬歇爾包含未知數量的KV paiirs的JSON對象的列表

[ 
    { 
    "id" : 1, 
    "first_name" : "Jane", 
    "last_name" : "Doe" 
    }, 
    { 
    "id" : 2, 
    "first_name" : "John", 
    "middle_name" : "Q", 
    "last_name" : "Public", 
    "birth_year" : 1971 
    }, 
    { 
    "id" : 3, 
    "anonymous_user" : true, 
    "crm_id" : "abc123" 
    }, 
    { 
    "id" : 4, 
    "first_name" : "Albert", 
    "last_name" : "Einstein", 
    "profession" : "Scientist", 
    "birth_year" : 1879, 
    "e_equals_mc_squared" : true 
    } 
] 

的目標是用傑克遜元帥POJO。我的想法是,我可以有一個類包含每個K,V對..類似:

public class myDataObject { 
    private String key; 
    private T value; 

    ... 
} 

也許應該是一個容器類:

public class myDataContainer { 
    private ArrayList<myDataObject> dataList; 

    ... 
} 

我的問題是什麼封送處理看起來像使用傑克遜?對於json沒有模式,每個json對象可以有一個未指定數量的K,V對,並且鍵的列表也是未指定的。

做了這樣的工作嗎?這甚至是正確的方法嗎?

ArrayList<myDataContainer> dataList = mapper.readValue(jsonFile, new TypeReference<ArrayList<myDataContainer>() {}); 

回答

1

你的JSON真的是一張地圖列表 - 用字符串作爲鍵和作爲值的對象。

因此,使用傑克遜,你應該能夠做到:

ObjectMapper mapper = new ObjectMapper(); 
List<Map<String, Object>> data = mapper.readValue(json, new TypeReference<List<Map<String, Object>>>(){});