1

当我使用 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 和 JSONArray,其中包括 JSONObjects)。将来 JSON 字符串将/必须使用更多数组(不是文章,而是其他东西)进行扩展。

我从 HttpServlet 检索这个生成的 JSON 字符串。将 Gson JSON 字符串反序列化回 ArrayList 是否有意义,或者我应该使用 GWT JavaScript 覆盖类型?

谢谢和BR,我的贝克

4

2 回答 2

2

发生这种情况是因为您向 Gson 提供了一个对象列表。因此,如果您想获得与第一个 json 片段相同的输出,则必须定义对象,该对象将保存文章列表。例如:

public class ArticlesResult {
   private List<Article> articles;


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

关于将 JsArray 转换回 ArrayList。这取决于,大多数时候最好使用覆盖类型,因为它们创建速度更快,并且在生成的 JS 代码中占用的空间很小。但这仅适用于生产模式。在开发模式下,覆盖类型比较慢,所以如果你快速访问覆盖类型,你会在那里浪费很多时间。

于 2012-02-08T09:57:46.150 回答
1

引用Gson 用户指南

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

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

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

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

于 2012-02-08T09:51:53.967 回答