1

我正在创建 json 对象来保存数据,然后将其发送到 servlet。但是,当我尝试检索该对象并在 java servlet 中显示其内容时,它会抛出一个错误,提示“A JSONObject 文本必须以 '{' 在 1 [字符 2 第 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 文本必须以 '{' at 1 [character 2 line 1] 开头”。如何解析对象并形成 xml 或字符串?

4

2 回答 2

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');
     }
});
于 2012-12-31T08:39:10.587 回答
3

在 Java 方面,您需要首先将 JSON 数组转换为 Java POJO bean,以便能够(轻松)对其进行处理。有多个 API 可以做到这一点;Google GSON 和 Jackson 是两种可能。

JAX-RS API 的参考实现 Jersey 在内部使用 Jackson;根据我的经验,它非常有效。

于 2012-12-31T09:15:49.387 回答