JSON 对象构建不正确

JSON Object is built incorrectly

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

而且我只能调用其中的前三个。我试图用 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
    }

您似乎正在使用 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 class 中有适当的吸气剂):

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();

此外,此代码将 return 所有 项放入类别列表中,而不仅仅是前三个。