【问题标题】:Create a specific JSON String with Gson使用 Gson 创建特定的 JSON 字符串
【发布时间】:2012-02-08 09:38:47
【问题描述】:

当我使用 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 字符串将/必须扩展为更多数组(不是文章,而是其他内容)。

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

谢谢,BR, 我的贝克

【问题讨论】:

    标签: java json gwt gson json-lib


    【解决方案1】:

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

    public class ArticlesResult {
       private List<Article> articles;
    
    
       ...//the rest of the code, like getters and setters
    }
    

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

    【讨论】:

      【解决方案2】:

      引用Gson User Guide:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多