使用Gson创建特定的JSON字符串

时间:2012-02-08 09:38:48

标签: java json gwt gson json-lib

当我使用JSON-Lib项目时,我可以使用命令

创建
JSONObject jObject = new JSONObject();
jObject.accumulate("articles", list);
String json = jObject.toString();

以下输出:

{
    "articles": [
        {
            "amount": "50",
            "id": "1",
            "pct": "50,00",
            "price": "162,37",
            "startamount": "100",
            "stockvalue": "8118,45"
        },
        {
            "amount": "20",
            "id": "2",
            "pct": "20,00",
            "price": "164,83",
            "startamount": "100",
            "stockvalue": "3296,60"
        },
        {
            "amount": "20",
            "id": "3",
            "pct": "20,00",
            "price": "170,40",
            "startamount": "100",
            "stockvalue": "3408,00"
        },...
]
}

与此同时,我使用Gson项目并与之相关联。 但是以下代码:

Gson gson = new Gson();
String json = gson.toJson(list);

会给我这个输出:

[
    {
        "id": "1",
        "amount": "50",
        "startamount": "100",
        "pct": "50,00",
        "price": "162,37",
        "stockvalue": "8118,45"
    },
    {
        "id": "2",
        "amount": "20",
        "startamount": "100",
        "pct": "20,00",
        "price": "164,83",
        "stockvalue": "3296,60"
    },...]

我列表中的元素是我的pojo文章中的对象

public class Article implements IsSerializable {
    private String id;
        private String amount;
        private String startamount;
        private String pct;
        private String price;
        private String stockvalue;

        public Article(){

        }

        //Setter & Getter
}

如何在Gson的帮助下创建一个JSON字符串,就像JSON-Lib将创建的一样(JSONObject with JSONArray,它包含JSONObjects)。 将来,JSON String将/必须使用更多数组进行扩展(不是文章,而是其他内容)。

我从HttpServlet中检索这个生成的JSON字符串。将Gson JSON字符串反序列化回ArrayList是否有意义,还是应该使用GWT JavaScript Overlay Types?

谢谢& BR, mybecks

2 个答案:

答案 0 :(得分:2)

这是因为你给了Gson一个对象列表。因此,如果您希望获得与第一个json片段相同的输出,则必须定义对象,该对象将包含文章列表。例如。 :

public class ArticlesResult {
   private List<Article> articles;


   ...//the rest of the code, like getters and setters
}

关于将JsArray转换回ArrayList。这取决于大多数情况下使用覆盖类型更好,因为它们创建起来更快,并且在生成的JS代码中占用空间小。但它仅适用于生产模式。在devmode中,叠加类型较慢,因此如果您快速访问叠加类型,则会浪费大量时间。

答案 1 :(得分:1)

引用Gson User Guide

  

Gson是一个Java库,可用于将Java对象转换为JSON表示。

这意味着您必须在序列化为JSON的Java对象的JSON字符串中提供要查看的完整结构。

在您的情况下,您需要将文章列表包装在具有属性“articles”的bean中。

如果需要构建动态结构,Gson可能不是最适合您的工具。 您可以将Gson与JAXB等XML绑定工具进行比较。与JAXB一起使用的bean结构不应在运行时更改。