【问题标题】:JSON Object is built incorrectlyJSON 对象构建不正确
【发布时间】:2020-10-13 20:06:31
【问题描述】:

我正在尝试从我的 SQL 中获取数据。我的 Servlet 中的数据被放入一个数组列表中。之后,我构建了一个 JSON 对象并将其传递给我的 JSP 文件。 现在我的浏览器接收到的对象真的很奇怪。

我也只能调用前 3 个。我尝试使用 for 循环从列表中获取所有内容,但这给了我一个错误。任何想法我做错了什么? 哦,我也不允许使用 JQuery。 :(

我收到这样的 JSON:

    {"id":"1GürtelA","kategorie":"2schuheS","oberkategorie":"3HoseB"}

但应该是:

    {"id":"1", "kategorie":"Gürtel", "oberkategorie":"A"}
    {"id":"2", "kategorie":"schuhe", "oberkategorie":"S"}
    {"id":"3", "kategorie":"Hose", "oberkategorie":"B"}

这是我的 Servlet 的一部分:

        List<KategorieBean> kategorien = displayKat();

        HttpSession session = request.getSession();
        session.setAttribute("kategorie", kategorien);

        response.setContentType("text/plain");
        response.setCharacterEncoding("UTF-8");
        
        String resultJson = Json.createObjectBuilder()
                .add("id", (kategorien.get(0).toString()))
                .add("kategorie", (kategorien.get(1).toString()))
                .add("oberkategorie", (kategorien.get(2).toString()))     
                .build()
                .toString();
        
        PrintWriter writer = response.getWriter();
        writer.print(resultJson);
        writer.flush();

这里是 toString 我必须覆盖。

    @Override
    public String toString() {
        return id + kategorie + oberK ;
       // This method is in my Bean
    }

【问题讨论】:

标签: java servlets javax.json


【解决方案1】:

您似乎正在使用 javax.json API,而您的预期输出不是有效的 JSON。

应该是一个数组:

[{"id":"1", "kategorie":"Gürtel", "oberkategorie":"A"},
{"id":"2", "kategorie":"schuhe", "oberkategorie":"S"},
{"id":"3", "kategorie":"Hose", "oberkategorie":"B"}]

要实现这一点,您需要修复 JSON 构建代码(假设您在 KategorieBean 类中有适当的 getter):

JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
for (KategorieBean category : kategorien) {
    JsonObjectBuilder itemBuilder = Json.createObjectBuilder();
    arrayBuilder.add(
        itemBuilder
            .add("id", category.getId())
            .add("kategorie", category.getKategorie())
            .add("oberkategorie", category.getOberK())
            .build()
    );
}
String resultJson = arrayBuilder.build().toString();

此代码还将返回类别列表中的所有项,而不仅仅是前三个。

【讨论】:

  • 是的,它正在工作 :D 非常感谢 :) 抱歉,我没有翻译变量名和内容。
  • 没问题。您可以使用其他工具/库来创建 JSON,例如 Jackson 或 Gson - 它们更方便,并且不需要此样板代码。
  • 是的,我知道。但是我的教授不希望我们使用图书馆之类的东西。他说,重要的是我们在使用工具之前先了解基础知识,而不了解其背后的逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
相关资源
最近更新 更多