2015-05-14 535 views
-2

我想解析Java中的JSON字符串。如何解析只有值但沒有名稱的JSON?

我的JSON輸入如下所示:

{ 
    "id-1": { 
      "att-a":5, 
      "att-b":3 
      }, 
    "id-2": { 
      "att-a":5, 
      "att-b":3 
      } 
} 

我曾嘗試與創建,通過每一個JSON對象,他發現並保存那些符合「ID-」,作爲一個新的對象和循環解析器來解決這個下面的「att-」作爲新的Objects屬性。

你們中的任何一個人都知道是否有更簡單的方法?我想將這些信息存儲在一個包含「id- ..」字符串的名爲「id」的字符串變量的對象中。 'att-'變量不是問題。

€2:我不知道每次查詢服務器時會得到多少「id- ..」對象。

€3:在這裏,我想已經從JSON創建了Java對象:這樣做

public class Data { 
    private String id; 

    private String att_a; 

    private String att_b; 

    // Constructor 

    //Setters and Getters 

} 
+11

這不是JSON。 JSON在對象語法中不使用「=」字符。 –

+0

你是對的,對不起。無法複製它由於機密信息,所以我只是寫下來... :) –

+1

哪裏沒有名稱的屬性是? –

回答

1

個人而言,我會做下列之一:

  1. 如果你總是有相同數量和「ID-」值(例如1〜4)的同名然後創建4 POJO字段,id-1,id-2,id-3和id-4。這些字段中的每一個都是包含字段「att-a」和「att-b」的Id類型。然後你只需使用類似傑克遜等的庫將JSON解析到POJO中。

  2. 獲取作爲JSON對象的根內容(再次使用jackson或類似庫),並遍歷對象的子對象(可以使用getFirstChild然後nextSibling每個孩子),每個條目添加到您選擇的任何對象的列表中使用

編輯

通過一些舊的代碼看,我最近使用谷歌GSON爲我解析。在最簡單的形式:

String json = // insert your code here that gets your JSON as a string 

JsonParser jp = new JsonParser(); 
JsonElement parsed = jp.parse(json); 

那麼這些人應該工作:

JsonObject obj = parsed.getAsJsonObject(); 
// OR 
JsonPrimitive prim = parsed.getAsJsonPrimitive(); 

EDIT 2

我只是把這個在一起 - 你可能會想收拾一下吧。等但應該給你一個想法:

public void test1() { 
    String json = "{ \"id-1\": { \"att-a\":5, \"att-b\":3 }, \"id-2\": { \"att-a\":5, \"att-b\":3 } }"; 
    InputStream is = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)); 

    ObjectMapper mapper = new ObjectMapper(); 
    JsonNode rootNode = null; 
    try { 
     rootNode = mapper.readValue(is, JsonNode.class); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    int i = 1; 
    while(rootNode.get("id-" + i) != null) { 
     JsonNode myNode = rootNode.get("id-" + i); 
     // DO LOGIC WITH YOUR NODE HERE 
     i++; 
     System.out.println(myNode); 
    } 
} 
+0

這是一個非常好的想法,你能否給我一個數字2的例子,因爲我並不總是有4個成員 –

+0

在編輯中增加了一些簡短的示例代碼 - 我現在沒有任何關於我的例子可以遍歷節點,但希望能幫助你入門 – Matt

+0

如果你想使用Jackson(whic我很喜歡)看看這個頁面:http://wiki.fasterxml.com/JacksonInFiveMinutes – Matt

-3

不太清楚的問題,同時也爲人們提到有問題,你的JSON,但如何這個 ?

x: <<your stuff>> 

只是帶屬性名稱的前綴?

+1

OP是*解析* JSON ,不生成它 –

+0

add x:試圖解析之前 – n00b