2014-10-10 72 views
0

我有此JSON結構的JSON文件:使用GSON解析與鍵和標籤

{ 
    "itemname1": [ 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     } 
    ], 
    "itemname2": [ 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": false 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": false 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     } 
    ], 
    "itemname3": [ 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": "http:\/\/url.com/something" 
     }, 
     { 
      "var1": "VALUE STRING", 
      "var2": "http:\/\/url.com/something", 
      "var3": "VALUE STRING", 
      "var4": 123456, 
      "var5": false 
     } 
    ] 
} 

我已經創建瞭解析JSON文件的一些對象:

ItemList.java

public class ItemList { 
    List<Item> item; 

    public List<Item> getItem() { 
     return item; 
    } 

    public void setItem(List<Item> item) { 
     this.item = item; 
    } 
} 

Item.java

public class Item { 
    ItemTab [] itemTab; 

    public ItemTab [] getItemTab() { 
     return itemTab; 
    } 

    public void setItemTab(ItemTab [] itemTab) { 
     this.itemTab = itemTab; 
    } 
} 

ItemTab.java

public class ItemTab { 
    List<ItemInfo> itemInfo; 

    public List<ItemInfo> getItemInfo() { 
     return itemInfo; 
    } 

    public void setItemInfo(List<ItemInfo> itemInfo) { 
     this.itemInfo = itemInfo; 
    } 
} 

ItemInfo.java

public class ItemInfo { 
    String var1; 
    String var2; 
    String var3; 
    Integer var4; 
    String var5; 

    public String getVar1() { 
     return var1; 
    } 

    public void setVar1(String var1) { 
     this.var1 = var1; 
    } 
    ... 
} 

而且解析部分:

try { 
    GsonBuilder builder = new GsonBuilder(); 
    Gson gson = builder.create(); 

    HttpResponse streamData = Network.getData("http://urlofmyjson.com/file.json"); 

    if (streamData.getStatusLine().getStatusCode() == 200) { 

     Reader reader = new InputStreamReader(streamData 
          .getEntity().getContent()); 

     return gson.fromJson(reader, ItemList.class); 
    } 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (URISyntaxException e) { 
    e.printStackTrace(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

當我把這個行:

Log.e("RESULT", result.getItem().get(0).getItemTab()[0].getItemInfo().get(0).getVar1().toString()); 

我收到此錯誤:

顯示java.lang.NullPointerException:嘗試上的空對象引用調用接口方法 'java.lang.Object中java.util.List.get(INT)'

添加:我還需要檢索「itemname」作爲字符串,但我不知道該怎麼做。

有人可以幫我解決這個問題嗎?

感謝

+0

是什麼結果呢?也許getItem返回null? – ToYonos 2014-10-10 10:54:11

+0

結果是解析函數返回的對象(ItemList)(通過以下代碼行:「return gson.fromJson(reader,ItemList.class);」)。 – Skylive 2014-10-10 10:59:50

+0

@Skylive'var4'是整數 – Gattsu 2014-10-10 11:04:30

回答

0

這不是工作,因爲JSON文件是從你的類不同。

gson試圖解析ItemList類。它位於你的json的根目錄,因此只有3個字段:itemname1,itemname2itemname3。您的班級只有ListItem,其數組爲ItemTab,其ListItemInfo。它們都不適用於找到的屬性,所以解析器不會執行任何操作,並返回一個沒有實例化的實例。

與您發佈的JSON匹配的唯一類是ItemInfo類,其他類型是不必要的。您需要創建另一個類(我將其稱爲MyJSon,但將其稱爲更好),並將getter和setter設置爲JSON中的3個字段。這將是這樣的:

public class MyJSon{ 

private ItemInfo[] itemname1; 
private ItemInfo[] itemname2; 
private ItemInfo[] itemname3; 

public void setItemname1(ItemInfo[] itemname1) { 
    this.itemname1 = itemname1; 
} 

public void setItemname2(ItemInfo[] itemname2) { 
    this.itemname2 = itemname2; 
} 

public void setItemname3(ItemInfo[] itemname3) { 
    this.itemname3 = itemname3; 
} 

public ItemInfo[] getItemname1() { 
    return itemname1; 
} 

public ItemInfo[] getItemname2() { 
    return itemname2; 
} 

public ItemInfo[] getItemname3() { 
    return itemname3; 
} 

} 

然後你回到這個類,而不是ItemList,像這樣:

return gson.fromJson(reader, MyJson.class); 
+0

這是工作,謝謝! – Skylive 2014-10-10 11:22:44

1

嘗試這兩類它應該工作

public class ItemList 
{ 

    @JsonProperty("itemname1") 
    private List<ItemName> itemname1 = new ArrayList<ItemName>(); 
    @JsonProperty("itemname2") 
    private List<ItemName> itemname2 = new ArrayList<ItemName>(); 
    @JsonProperty("itemname3") 
    private List<ItemName> itemname3 = new ArrayList<ItemName>(); 
    @JsonIgnore 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

    @JsonProperty("itemname1") 
    public List<ItemName> getItemname1() { 
     return itemname1; 
    } 

    @JsonProperty("itemname1") 
    public void setItemname1(List<ItemName> itemname1) { 
     this.itemname1 = itemname1; 
    } 

    @JsonProperty("itemname2") 
    public List<ItemName> getItemname2() { 
     return itemname2; 
    } 

    @JsonProperty("itemname2") 
    public void setItemname2(List<ItemName> itemname2) { 
     this.itemname2 = itemname2; 
    } 

    @JsonProperty("itemname3") 
    public List<ItemName> getItemname3() { 
     return itemname3; 
    } 

    @JsonProperty("itemname3") 
    public void setItemname3(List<ItemName> itemname3) { 
     this.itemname3 = itemname3; 
    } 

    @JsonAnyGetter 
    public Map<String, Object> getAdditionalProperties() { 
     return this.additionalProperties; 
    } 

    @JsonAnySetter 
    public void setAdditionalProperty(String name, Object value) { 
     this.additionalProperties.put(name, value); 
    } 





} 


public class ItemName { 

    @JsonProperty("var1") 
    private String var1; 
    @JsonProperty("var2") 
    private String var2; 
    @JsonProperty("var3") 
    private String var3; 
    @JsonProperty("var4") 
    private Integer var4; 
    @JsonProperty("var5") 
    private String var5; 
    @JsonIgnore 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

    @JsonProperty("var1") 
    public String getVar1() { 
     return var1; 
    } 

    @JsonProperty("var1") 
    public void setVar1(String var1) { 
     this.var1 = var1; 
    } 

    @JsonProperty("var2") 
    public String getVar2() { 
     return var2; 
    } 

    @JsonProperty("var2") 
    public void setVar2(String var2) { 
     this.var2 = var2; 
    } 

    @JsonProperty("var3") 
    public String getVar3() { 
     return var3; 
    } 

    @JsonProperty("var3") 
    public void setVar3(String var3) { 
     this.var3 = var3; 
    } 

    @JsonProperty("var4") 
    public Integer getVar4() { 
     return var4; 
    } 

    @JsonProperty("var4") 
    public void setVar4(Integer var4) { 
     this.var4 = var4; 
    } 

    @JsonProperty("var5") 
    public String getVar5() { 
     return var5; 
    } 

    @JsonProperty("var5") 
    public void setVar5(String var5) { 
     this.var5 = var5; 
    } 

    @JsonAnyGetter 
    public Map<String, Object> getAdditionalProperties() { 
     return this.additionalProperties; 
    } 

    @JsonAnySetter 
    public void setAdditionalProperty(String name, Object value) { 
     this.additionalProperties.put(name, value); 
    } 

} 
+0

如果它有效,你可以接受這個答案。謝謝 – Raghuram 2014-10-10 12:25:04