在 Spring MVC 中使用 Jackson JSON 解析 JSON
Posted
技术标签:
【中文标题】在 Spring MVC 中使用 Jackson JSON 解析 JSON【英文标题】:Parsing JSON in Spring MVC using Jackson JSON 【发布时间】:2011-08-26 13:09:34 【问题描述】:好的,所以我已经研究了一段时间了,不再赘述。我有一个 Spring MVC servlet,我需要从 javascript 前端 Web 应用程序接受 JSON。要解析 JSON,我需要使用 Jackson。我需要获取 JSON 中的值,并按照它们在 JSON 中出现的顺序将它们存储到 List 中。我已经尝试将 JsonFactory 与 JsonParser 和 JsonNode 对象一起使用,但可以让它正常工作。我也尝试打开一个 BufferedReader 并逐行遍历请求正文,但也不能完全得到这个。我在这里查看了几个相关问题,但到目前为止没有一个对我有用。
知道的任何人都可以在这里为我指明正确的方向吗,带有示例的网页会很棒!
【问题讨论】:
使用 BufferedReader 并逐行迭代是一个非常糟糕的主意,因为您的代码可能会对从 Javascript 接收到的 json 格式的变化敏感。使用真正的 json 解析器要好得多。 请发布您尝试过的代码并告诉我们哪些地方不起作用(即您期望 A,但您得到 B),帮助您解决这些信息要容易得多。 【参考方案1】:使用像 Jackson 这样的映射技术的全部意义在于您可以使用对象(您不必自己解析 JSON)。
定义一个类似于您期望的 JSON 的 Java 类。
例如这个 JSON:
"foo" : ["abc","one","two","three"],
"bar" : "true",
"baz" : "1"
可以映射到这个类:
public class Fizzle
private List<String> foo;
private boolean bar;
private int baz;
// getters and setters omitted
现在如果你有这样的控制器方法:
@RequestMapping("somepath")
@ResponseBody
public Fozzle doSomeThing(@RequestBody Fizzle input)
return new Fozzle(input);
如果你从上面传入 JSON,Jackson 会自动为你创建一个 Fizzle 对象,它会将返回的 Object 的 JSON 视图序列化为 mime 类型为 application/json
的响应。
查看完整的工作示例see this previous answer of mine。
【讨论】:
这看起来和我想要的完全一样,谢谢。所以我认为我不需要创建一个新类,因为 JSON 将非常简单,例如:“pref1”,“pref2”...,所以我试图将它添加到列表中(@RequestBody ListFizzle fizzle = new ObjectMapper().readValue(json, Fizzle.class)
@zodiac645 还有重载方法ObjectMapper.readValue(url, class)
但也许你应该为此创建自己的问题【参考方案2】:
我正在使用来自http://json-lib.sourceforge.net/的 json lib json-lib-2.1-jdk15.jar
import net.sf.json.JSONObject;
...
public void send()
//put attributes
Map m = New HashMap();
m.put("send_to","my@admin.lan");
m.put("email_subject","this is a test email");
m.put("email_content","test email content");
//generate JSON Object
JSONObject json = JSONObject.fromObject(content);
String message = json.toString();
...
public void receive(String jsonMessage)
//parse attributes
JSONObject json = JSONObject.fromObject(jsonMessage);
String to = (String) json.get("send_to");
String title = (String) json.get("email_subject");
String content = (String) json.get("email_content");
...
更多示例在这里http://json-lib.sourceforge.net/usage.html
【讨论】:
拜托:json-lib 已经过时了。使用 GSON 或 Jackson(OP 明确提到) Jackson lib 看起来很酷。就我而言, json-lib 就足够了。肖恩,无论如何,谢谢。以上是关于在 Spring MVC 中使用 Jackson JSON 解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring MVC 中使用 Jackson 和 Jersey 2 Client 反序列化 Joda DateTime?
在Spring 3 MVC中怎么动态的让jackson忽略字段
当使用 Spring MVC for REST 时,如何让 Jackson 漂亮地打印呈现的 JSON?