我正在创建json对象以保存数据,然后将其发送到servlet。但是当我尝试检索对象并在java servlet中显示其内容时,它会抛出一个错误,指出“JSONObject文本必须以'{'1 [character 2 line 1]”开头。我不知道如何在java中显示从javascript发送的json对象。这就是我在做的事情:
Javascript代码:
var arrayOfObjects = [];
arrayOfObjects.push({"divid":imageinc,"xCordinates":Xcord,"yCordinates":Ycord,"Height":canvasWidth,"Width":canvasHeight, "PageNo":pageNum});
显示Javascript内容:
for (var i = 0; i < arrayOfObjects.length; i++) {
var object = arrayOfObjects[i];
for (var property in object) {
alert(property + '=' + object[property]);
}
}
使用jquery Ajax将对象发送到servlet:
var param = 'objarray=' +arrayOfObjects;
$.ajax({
url: '/ProjectName/finalXmlServGen',
type: 'POST',
dataType: 'json',
data: param,
success: function(result) {
alert('SUCCESS');
}
});
一旦我调用ajax,我就会收到成功消息。现在,我在servlet中收到此对象:
String objarray = request.getParameter("objarray").toString();
try {
JSONObject jsonObj = new JSONObject(objarray);
String xmlString= XML.toString(jsonObj);
System.out.println("JSON to XML: " + xmlString);
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
我在控制台中看到的消息是错误“JSONObject文本必须以'{'1 [character 2 line 1]”开头。我如何解析对象并形成一个xml或字符串?
答案 0 :(得分:5)
你构建的不是“JSON对象”,而是一个简单的javascript对象。
您必须使用JSON编码对象:
var param = '?objarray=' + JSON.stringify(arrayOfObjects);
$.ajax({
url: '/ProjectName/finalXmlServGen'+param,
type: 'POST',
dataType: 'json',
success: function(result) {
alert('SUCCESS');
}
});
或者你可以让jQuery进行编码:
$.ajax({
url: '/ProjectName/finalXmlServGen',
type: 'POST',
dataType: 'json',
data: {objarray: arrayOfObjects}
success: function(result) {
alert('SUCCESS');
}
});
答案 1 :(得分:3)
在Java方面,您需要首先将JSON数组转换为Java POJO bean,以便能够(轻松地)对其执行某些操作。有多个API可以做到这一点;谷歌GSON和杰克逊有两种可能性。
杰克逊在泽西内部使用,是JAX-RS API的参考实现;根据我的经验,它的效果非常好。