簡體   English   中英

使用GSON解析具有鍵和制表符的JSON文件

[英]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個字段: itemname1itemname2itemname3 您的類只有一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM