I have this json structure :
{
"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
}
]
}
I have created some objects for parse json file :
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;
}
...
}
And the parsing part :
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();
}
And when i call this line :
Log.e("RESULT", result.getItem().get(0).getItemTab()[0].getItemInfo().get(0).getVar1().toString());
I receive this error :
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
Add : I also need to retrieve the "itemname" as string but i don't know how to do that.
Somebody can help me to solve this problem ?
Thanks
Try these two classes it should work
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);
}
}
This is not working because the json file is different from your classes.
The gson tries to parse the ItemList
class. It is in the root of your json, so there is only 3 fields: itemname1
, itemname2
and itemname3
. Your class only has a List
of Item
, which has an array of ItemTab
, which has a List
of ItemInfo
. None of them apply to the properties that were found, so the parser does nothing and return you an instance with nothing instantiated.
The only class that matches the JSON you posted is the ItemInfo
class, the other ones are unnecessary. You need to create another class (I'll call it MyJSon
, but call it something better) and make getters and setters to the 3 fields you have in your JSON. It would be something like this:
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;
}
}
Then you return this class instead of ItemList
, like this:
return gson.fromJson(reader, MyJson.class);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.