在Spring MVC中使用Jackson JSON解析JSON

23 浏览
0 Comments

在Spring MVC中使用Jackson JSON解析JSON

我已经花了一些时间研究这个问题,但还没有取得任何进展。我有一个Spring MVC servlet,需要接受来自JavaScript前端Web应用的JSON数据。为了解析JSON,我需要使用Jackson。我需要将JSON中的值按照它们在JSON中出现的顺序存储到一个List中。我尝试过使用JsonFactory、JsonParser和JsonNode对象,但无法完全弄清楚如何使用。我也尝试过打开一个BufferedReader,逐行迭代请求体,但同样无法完全实现。我在这里查看了一些相关的问题,但迄今为止还没有解决我的问题。请问了解的人能否指点我一下,提供一个示例的网页会很棒!

0
0 Comments

在上述内容中,问题的出现原因是使用了json-lib库进行JSON解析,而这个库已经过时。解决方法是使用更现代的库,如GSON或Jackson。

以下是整理后的文章:

在Spring MVC中使用Jackson JSON解析JSON

在Spring MVC中,解析JSON是一项常见的任务。为了解析JSON数据,通常使用第三方库。在过去,json-lib是一个流行的选择之一,但它已经过时了。在本文中,我们将探讨为什么要使用更现代的库,如Jackson来解析JSON,并提供相应的解决方法。

在上述内容中,我们可以看到代码使用了json-lib库来生成和解析JSON数据。在send()方法中,代码首先将属性放入一个HashMap中,然后通过调用JSONObject.fromObject()方法将其转换为JSON对象。类似地,在receive()方法中,代码从JSON字符串中解析出属性值。

然而,上述实现使用的json-lib库已经过时。正如内容中提到的,更好的选择是使用GSON或Jackson库。这些库提供了更好的性能、更多的功能和更好的维护支持。

要解决这个问题,我们可以使用Jackson库来代替json-lib库。Jackson是一个功能强大且流行的Java库,用于处理JSON数据。它提供了多种方式来解析JSON,包括将JSON数据直接映射到Java对象。

下面是使用Jackson库进行JSON解析的示例代码:

import com.fasterxml.jackson.databind.ObjectMapper;
...
public void send()
{
    //put attributes
    Map m = new HashMap<>();
    m.put("send_to","my.lan");
    m.put("email_subject","this is a test email");
    m.put("email_content","test email content");
    
    //generate JSON string
    ObjectMapper objectMapper = new ObjectMapper();
    String message = objectMapper.writeValueAsString(m);
    ...
}
public void receive(String jsonMessage)
{
    try {
        //parse attributes
        ObjectMapper objectMapper = new ObjectMapper();
        Map json = objectMapper.readValue(jsonMessage, new TypeReference>(){});
        String to = json.get("send_to");
        String title = json.get("email_subject");
        String content = json.get("email_content");
        ...
    } catch (IOException e) {
        //handle exception
    }
}

如上所示,我们使用ObjectMapper类来进行JSON解析。在send()方法中,我们将属性放入一个HashMap中,然后使用ObjectMapper的writeValueAsString()方法将其转换为JSON字符串。在receive()方法中,我们使用ObjectMapper的readValue()方法将JSON字符串解析为Map对象。

通过使用Jackson库,我们可以更轻松地解析JSON数据,并且可以处理更复杂的数据结构。此外,Jackson库是一个广泛使用的库,具有更好的维护支持。

在Spring MVC中解析JSON是一项常见的任务。在过去,json-lib是一个常用的库,但它已经过时。为了解决这个问题,我们可以使用更现代的库,如Jackson。Jackson库提供了更好的性能、更多的功能和更好的维护支持。通过使用Jackson库,我们可以更轻松地解析JSON数据,并且可以处理更复杂的数据结构。因此,在开发Spring MVC应用程序时,建议使用Jackson库来解析JSON数据。

0
0 Comments

问题的原因是使用Jackson JSON时,无法将JSON对象直接绑定到Java数组或列表。解决方法是定义一个与预期的JSON相似的Java类,并使用该类来接收JSON数据。

首先,定义一个Java类来与预期的JSON对应,例如:

public class Fizzle{
    private List foo;
    private boolean bar;
    private int baz;
    // getters and setters omitted
}

然后,创建一个Controller方法来处理请求,并将JSON数据绑定到该类的对象中:

@PostMapping("somepath")
public Fozzle doSomeThing(@RequestBody Fizzle input){
    return new Fozzle(input);
}

这样,当传入上述JSON数据时,Jackson会自动创建一个Fizzle对象,并将返回的对象序列化为JSON格式的响应。

如果想要了解完整的工作示例,可以参考之前的回答。

如果想要将JSON数据添加到一个列表中,需要确保JSON的结构与Java类的结构匹配。如果JSON是一个主级别的对象,包含多个属性(如foo,bar,baz),每个属性有不同类型的值(列表、字符串/布尔值、字符串/数字),则需要创建一个相应的Java类来接收JSON数据。

如果要从URL中获取JSON数据并进行请求,可以使用ObjectMapper的readValue方法:

Fizzle fizzle = new ObjectMapper().readValue(url, Fizzle.class);

如果想要添加一个新的属性到类中,但在请求中没有为它提供值,可能会导致错误。

0