2014-10-10 71 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