[英]Using GSON to parse a JSON file with keys and tab
我有這個json結構:
{
"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”作為字符串,但是我不知道該怎么做。
有人可以幫助我解決這個問題嗎?
謝謝
試試這兩個類應該工作
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);
}
}
這不起作用,因為json文件與您的類不同。
gson嘗試解析ItemList
類。 它位於json的根目錄中,因此只有3個字段: itemname1
, itemname2
和itemname3
。 您的類只有一個Item
List
,它具有一個ItemTab
數組,該數組具有一個ItemInfo
List
。 它們都不適用於找到的屬性,因此解析器不執行任何操作,並向您返回未實例化任何實例的實例。
與您發布的JSON匹配的唯一類是ItemInfo
類,其他類則不必要。 您需要創建另一個類(我將其MyJSon
,但要更好一些),並對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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.