Разбор JSON в Spring MVC с использованием JSON Джексона - PullRequest
40 голосов
/ 16 мая 2011

Хорошо, так что я смотрю на это некоторое время и не буду дальше. У меня есть сервлет Spring MVC, который мне нужен для принятия JSON из веб-приложения JavaScript. Для разбора JSON мне нужно использовать Джексона. Мне нужно взять значения в JSON и сохранить их в список в порядке их появления в JSON. Я пытался использовать JsonFactory с объектами JsonParser и JsonNode, но вполне могу заставить его работать. Я также пытался просто открыть BufferedReader и перебирать тело запроса построчно, но опять-таки тоже не могу этого получить. Я рассмотрел пару связанных здесь вопросов, но ни один до сих пор не работал для меня.

Может кто-нибудь из знающих направит меня сюда, пожалуйста, веб-страница с примером была бы отличной!

Ответы [ 2 ]

81 голосов
/ 16 мая 2011

Весь смысл использования технологии отображения, такой как Джексон, состоит в том, что вы можете использовать объекты (вам не нужно анализировать JSON самостоятельно).

Определите Java-класс, который похож на JSON, который вы ожидаете.

например, этот 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
}

Теперь, если у вас есть метод Controller, подобный этому:

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

и вы передаете JSON сверху, Джексон автоматически создаст для вас объект Fizzle и сериализует представление JSON возвращенного объекта в ответ с типом mime application/json.

Полный рабочий пример см. Мой предыдущий ответ .

1 голос
/ 16 мая 2011

Я использую json lib из http://json -lib.sourceforge.net /
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...