Как читать json, посланный ajax в сервлете
Я новичок в java, и я борюсь с этой проблемой в течение 2 дней и, наконец, решил спросить здесь.
Я пытаюсь прочитать данные, отправленные jQuery, поэтому я могу использовать его в своем сервлет
JQuery
var test = [
{pv: 1000, bv: 2000, mp: 3000, cp: 5000},
{pv: 2500, bv: 3500, mp: 2000, cp: 4444}
];
$.ajax({
type: 'post',
url: 'masterpaket',
dataType: 'JSON',
data: 'loadProds=1&'+test, //NB: request.getParameter("loadProds") only return 1, i need to read value of var test
success: function(data) {
},
error: function(data) {
alert('fail');
}
});
сервлетов
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (request.getParameter("loadProds") != null) {
//how do i can get the value of pv, bv, mp ,cp
}
}
Я очень ценю любую помощь, которую вы можете предоставить.
Ответы
Ответ 1
Вы не сможете разобрать его на сервере, если вы не отправите его правильно:
$.ajax({
type: 'get', // it easier to read GET request parameters
url: 'masterpaket',
dataType: 'JSON',
data: {
loadProds: 1,
test: JSON.stringify(test) // look here!
},
success: function(data) {
},
error: function(data) {
alert('fail');
}
});
Вы должны использовать JSON.stringify
для отправки объекта JavaScript в виде строки JSON.
А затем на сервере:
String json = request.getParameter("test");
Вы можете разбирать строку json
вручную или использовать любую библиотеку (я бы рекомендовал gson).
Ответ 2
Вам нужно будет использовать парсер JSON для анализа данных в Servlet
import org.json.simple.JSONObject;
// this parses the json
JSONObject jObj = new JSONObject(request.getParameter("loadProds"));
Iterator it = jObj.keys(); //gets all the keys
while(it.hasNext())
{
String key = it.next(); // get key
Object o = jObj.get(key); // get value
System.out.println(key + " : " + o); // print the key and value
}
Вам понадобится библиотека json (например, Jackson) для анализа json
Ответ 3
Чтение и запись данных JSON с использованием jackson API следующим образом:
publicvoid doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
// This will store all received articles
List<Article> articles = new LinkedList<Article>();
if (request.getParameter("loadProds") != null) {
// 1. get received JSON data from request
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
String json = "";
if(br != null){
json = br.readLine();
}
// 2. initiate jackson mapper
ObjectMapper mapper = new ObjectMapper();
// 3. Convert received JSON to Article
Article article = mapper.readValue(json, Article.class);
// 4. Set response type to JSON
response.setContentType("application/json");
// 5. Add article to List<Article>
articles.add(article);
// 6. Send List<Article> as JSON to client
mapper.writeValue(response.getOutputStream(), articles);
}
}
Ответ 4
Использование import org.json.JSONObject вместо импорта org.json.simple.JSONObject помогло.
См. Как создать объект Json из String, содержащий символы, такие как ':', '[' и ']' в Java.