2012-03-11 40 views
2

好吧,我有一個JSON文件,它有一組對象,我希望解組到對象數組中。Jackson數據綁定模型解組對象數組

的JSON文件是如何佈局的一個例子是:

{ 
"data":{ 
    "name":{ 
    "fName":"John", 
    "lName":"Doe" 
    }, 
    "name":{ 
    "fName":"James", 
    "lName":"Dokes" 
    } 
} 
} 

完整的JSON文件是一個很多比這更復雜,這只是它是如何制定了一個例子。

我想要做的就是取這些名稱,並將它們解組成一個名稱對象數組,以便我可以隨時訪問每個名稱對象。

的類設置爲

測試類

private Data data; 

public void setData(Data d) { 
    data = d; 
} 

public Data getData() { 
    return data; 
} 

public String toString() { 
    return "" + data; 
} 

數據類

private Name name; 

public void setName(Name n){ 
    name = n; 
} 


public Name getName(){ 
    return name; 
} 


public String toString(){ 
    return "Names " + name; 
} 

然後名稱類只是

public class Name { 

private String fName; 
private String lName; 

//Getter setters here 

    public String toString(){ 
    return "\nFirstName: " + fName + "\nLastName: " + lName; 
} 

然後在主類, 我只是做

ObjectMapper mapper = new ObjectMapper(); 

    Test test = mapper.readValue(new File("C:\\JSON\\test.json"), 
      Test.class); 
    System.out.println(test); 

現在,這將打印出

Names 
FirstName: James 
LastName: Dokes 

卻忽略了名字對象,即李四。我想要的是將這些名稱對象中的每一個都放在一個ArrayList中,這樣我就可以訪問這些信息,並隨時顯示它。

我在這裏做錯了什麼?我試圖改變JSON文件,使名稱到一個數組,然後改變數據類的代碼,使名對象名稱的數組,卻得到了一個錯誤說

Can not deserialize instance of Data out of START_ARRAY token 

會有人能夠指出我在這裏正確的方向,因爲已經嘗試了許多不同的解決方案,但沒有成功。

預先感謝任何幫助

編輯:

如果我JSON這個樣子,然後

{ 
"data":{ 
    "name":[ 
     { 
     "fName":"John", 
     "lName":"Doe" 
     }, 
     { 
     "fName":"test", 
     "lName":"test2" 
    } 
    ] 
} 
} 

回答

4

你貼什麼是不是真的有效的JSON作爲data對象有兩個鍵具有相同的值name。或者說,這個JSON並不像你的標題所表明的那樣代表一個名稱數組。

如果JSON data是爲了成爲一個真正的JSON對象,這意味着它是類似的名稱到值的哈希表,那麼你應該代表比你的Java類作爲Map。但是你的Test類有一個單獨的Data字段,其​​中有一個單獨的Name字段。 Test的一個實例在此結構中不能有多個Name

+0

好的,我更新了我的帖子。我的JSON應該看起來像我更新我的帖子? – AdamM 2012-03-11 18:57:01

+3

JSON看起來更合乎邏輯。爲了將其映射到Java POJO,您希望在Data類中將'name'數組表示爲'List '。 – 2012-03-11 22:24:26

+0

非常感謝,它現在完美! – AdamM 2012-03-12 08:09:18