如何使用Java序列化带有子集合的方便Json?

时间:2014-04-25 15:50:58

标签: java json gson

我想用以下方式建立一个json:

{"total":1,"rows":[{"id":1,"name":"Chai","price":18.00}],"footer":[{"name":"Total","price":18.00}]}

此示例来自:http://www.jeasyui.com/tutorial/datagrid/datagrid17.php

我必须拥有一个带有一些值的“total”属性和一个带有一个引用它的集合的“rows”属性,就像上面的例子一样。

考虑到对于“rows”属性,实际上我在Properties集合中有一组java List<Properties>类对象,其值为“id”,“name”和“price”。

注意:我正在使用GSon(https://sites.google.com/site/gson/gson-user-guide)对一组属性进行字符串化,但是我没有实现为该UI正确生成有效的json。

代码:

        Collection<Atividade> listProducts = storeService.getListPaged(category, rows, page);

        long qty = storeService.getTotal(category);

        List<Properties> lp = new LinkedList<Properties>();

        for (Item i : listProducts) {
            Properties prop = new Properties();

            prop.setProperty("id", Long.toString(i.getId()));
            prop.setProperty("name", i.getName());
            prop.setProperty("price", i.getPrice);
            lp.add(prop);
        }

        Object[][] array = {
            {"total",qty},
            {"rows", lp}
        };

        Gson gson = new GsonBuilder().setDateFormat("dd-MM-yyyy")
                .setPrettyPrinting().create();


        gList = gson.toJson(array);

此代码产生以下结果,而不是上面的结果:

[
  [
    "total",
    1
  ],
  [
    "rows",
    [
      {
        "id": "1",
        "name": "Chai",
        "price": "18.00",
      },
    ]
  ]
]

谢谢!

1 个答案:

答案 0 :(得分:0)

您要生成的JSON

{"total":1,"rows":[{"id":1,"name":"Chai","price":18.00}],"footer":[{"name":"Total","price":18.00}]}

是一个JSON对象。因此,您无法使用数组

Object[][] array = {
        {"total",qty},
        {"rows", lp}
};

生成它。

而是创建一个POJO类,其中包含您想要的每个JSON名称/值对的字段。一个用于total(一个数字),一个用于rows(一个数组/属性列表),另一个用于footer,这是一些其他对象。)

然后,您可以创建一个对象,初始化其字段,并使用Gson(或其他JSON序列化程序)对其进行序列化。