用Gson对Json进行反序列化

时间:2012-08-06 11:17:12

标签: android json deserialization gson

这是我的Json:

{"array":[
          {"pid":"1","product":"test","size":[
                                              {"id":"26","size":"6-13 weeks"},
                                              {"id":"25","size":"1-5 weeks"}]},
          {"pid":"2","product":"test2","size":[
                                              {"id":"31","size":"86\/92"},
                                              {"id":"27","size":"74\/80"}]}]}

我使用jsongen.byingtondesign.com生成了文件,但我似乎无法弄清楚如何获取数据(我看了很多教程,但我只是因为它们都不同而变得更加困惑。)

我需要根据pid和id获取数据。我需要输出带有pid的产品字符串...或带有id的大小字符串....(我应该重构我的json吗?)

只需要一些提示让我更进一步。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要的结构类似于

class Size {int id; String size;}
class Product {int pid; String product; List<Size> size;}
class Shop {List<Product> products;}

然后只需致电

Shop shop = gson.fromJson(jsonString, Shop.class);

在这里,我永远不记得是什么。结构看起来很好,名字没有。我建议像

这样的东西
class Size {int id; String name;}
class Product {int id; String name; List<Size> sizes;}
class Shop {List<Product> products;}

现在我看到你更喜欢某种地图。这是你可以在Java中轻松完成的事情,但你也可以把它放到Json中。但是,您要么引入冗余,要么丢失对象中的id。而不是

[
    {"id":"26","size":"6-13 weeks"},
    {"id":"25","size":"1-5 weeks"}
]

你可以使用

{
    "26": {"id":"26","size":"6-13 weeks"},
    "25": {"id":"25","size":"1-5 weeks"}
}

(有冗余)或

{
    "26": {"size":"6-13 weeks"},
    "25": {"size":"1-5 weeks"}
}

Size对象缺少其id)或

{
    "26": "6-13 weeks",
    "25": "1-5 weeks"
}

紧凑但难以扩展。 在任何情况下,我都是从Java而不是Json开始,这会让事情变得更容易,因为它是Java,你要处理很多。 Json字符串由Gson编写和读取,所以你不需要太在乎它的样子。