2014-02-13 57 views
1

我剛開始使用Jackson JSON解析器,我喜歡它,但我遇到了一個JSON對象的問題,我試圖解析它。我該如何用傑克遜JSON中的數字對象鍵來解析JSON

這裏是我當前的Java代碼:

public class resetPassword { 
    private String id; 
    private String key1; 
    private String key2; 


    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id= id; 
    } 

    public String getKey1() { 
     return key1; 
    } 

    public void setKey1(String key1) { 
     this.key1= key1; 
    } 

    public String getKey2() { 
     return key2; 
    } 

    public void setKey2(String key2) { 
     this.key2= key2; 
    } 
} 

我將如何解析傑克遜是這樣的:

{ 
    "1":{ 
     "key1":"val", 
     "key2":"val" 
    }, 
    "2":{ 
    "key":"val", 
    "key":"val" 
    }, .. etc 
} 

任何幫助,將根據這些信息,可以大大apreceated

+0

什麼實際問題? –

+0

我不斷收到一個錯誤,指出它無法將該json映射到該對象。我將嘗試追蹤輸出的確切錯誤。 –

+1

Json格式是固定的,還是可以更改它?我認爲更適合該域可能是將外部對象變成一個數組。這也將消除映射困難。 – Henry

回答

4

在評論中,我想你需要將遍歷與數據綁定結合起來。

首先,使用traversal,得到JsonNode對象{"key1": ..., "key2": ...}。 僞代碼(未測試):

ObjectMapper mapper = new ObjectMapper(); 
    JsonNode root = mapper.readTree(genreJson); 
    Iterator<String> fieldNames = root.fieldNames(); 
    while (fieldNames.hasNext()) { 
     String fieldName = fieldNames.next(); 
     JsonNode node = root.get(fieldName); 
     // now you should have {"key1": ...} in node 
    } 

然後使用data binding爲您找到的每個節點:

ResetPassword item = mapper.readValue(node, ResetPassword.class); 
+0

非常感謝你的幫助。我會試試這個。 –

+0

它的工作!非常感謝你。 –

1

如果你需要一個快速的方法,你可以將其設置爲Map;

ObjectMapper mapper = new ObjectMapper(); 

Map<String, Map<String, String>> map = mapper.readValue(br, Map.class); 
System.out.println(map); 

map現在是:

{1={key1=val, key2=val}, 2={key1=val, key2=val}} 

您可以相應地遍歷Map(s)並設置ResetPassword

PS:BR是我BufferedReader實例,它讀取json放在numeric.txt

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("numeric.txt"), "UTF-8"));