Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson JSON解析Spring MVC中的JSON_Java_Json_Spring_Spring Mvc_Jackson - Fatal编程技术网

Java 使用Jackson JSON解析Spring MVC中的JSON

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,逐行遍历请求主体,但同样也不能完全实现这一点。我已经在这里看了几个相关的问题,但到

好的,我已经看了一段时间了,我不再继续了。我有一个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 type
application/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);
}