Java 使用Jackson JSON解析Spring MVC中的JSON
好的,我已经看了一段时间了,我不再继续了。我有一个SpringMVCServlet,需要它从JavaScript前端web应用程序接受JSON。要解析JSON,我需要使用Jackson。我需要获取JSON中的值,并按照它们在JSON中出现的顺序将它们存储到列表中。我曾尝试将JsonFactory与JsonParser和JsonNode对象一起使用,但可以很好地让它工作。我也试着打开一个BufferedReader,逐行遍历请求主体,但同样也不能完全实现这一点。我已经在这里看了几个相关的问题,但到目前为止没有一个对我有效 任何人都知道我在这里的正确方向,请在一个网页与一个例子将是伟大的 我正在使用来自Java 使用Jackson JSON解析Spring MVC中的JSON,java,json,spring,spring-mvc,jackson,Java,Json,Spring,Spring Mvc,Jackson,好的,我已经看了一段时间了,我不再继续了。我有一个SpringMVCServlet,需要它从JavaScript前端web应用程序接受JSON。要解析JSON,我需要使用Jackson。我需要获取JSON中的值,并按照它们在JSON中出现的顺序将它们存储到列表中。我曾尝试将JsonFactory与JsonParser和JsonNode对象一起使用,但可以很好地让它工作。我也试着打开一个BufferedReader,逐行遍历请求主体,但同样也不能完全实现这一点。我已经在这里看了几个相关的问题,但到
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");
...
}
更多示例这里使用像Jackson这样的映射技术的全部意义在于您可以使用对象(您不必自己解析JSON) 定义一个类似于JSON的Java类 e、 g.本文件:
{
"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
}
当您从上面传入JSON时,Jackson将自动为您创建一个Fizzle对象,并将返回对象的JSON视图序列化为mime typeapplication/JSON
响应
作为一个完整的工作示例。使用BufferedReader并逐行迭代是一个非常糟糕的主意,因为您的代码可能会对从Javascript接收的json格式的更改非常敏感。使用真正的json解析器要好得多。请发布您尝试过的代码,并告诉我们什么不起作用(即,您期望a,但得到B),使用此信息帮助您要容易得多。请:json库非常过时。使用GSON或Jackson(OP明确提到)Jackson lib看起来很酷。在我的例子中,json库就足够了。肖恩,不管怎样,谢谢。这看起来和我想要的一模一样,谢谢。所以我不认为我需要创建一个新的类,因为JSON将非常简单,比如:{“pref1”,“pref2”…},所以我试图将它添加到一个列表(@RequestBody List body),但这似乎没有得到以下错误消息,“不能反序列化java.util.List的实例出START\u对象令牌”。有什么想法吗?@nom我以前没试过,我猜你必须在那里阅读Jackson文档。你不必创建新类;但结构必须匹配:您不能将JSON对象绑定到Java数组或列表(原因很明显)。你的JSON有一个带有属性(foo,bar,baz)的主级对象,每个属性都有不同类型的值(list,string/boolean,string/number)@zodiac645
Fizzle-Fizzle=new-ObjectMapper().readValue(JSON,Fizzle.class)
@zodiac645还有重载的方法,但也许你应该为此提出自己的问题
@RequestMapping("somepath")
@ResponseBody
public Fozzle doSomeThing(@RequestBody Fizzle input){
return new Fozzle(input);
}