我从JavaScript传递一个json对象到使用ajax的java servlet。Java的JSONArray从Javascript JSONArray
var jsonObj = JSON.stringify(objArray); //Then I pass it to Java using ajax.
在我的Java,我从请求获取JSON字符串,然后创建一个jsonarray,然后通过数组循环,并试图拉从数组中JSON对象之一,当我得到的错误。
String dataObj = request.getParameter("obj");
String sql = request.getParameter("sql");
ArrayList<Object> returnArray = new ArrayList<Object>();
int key;
//Get type of object being passed.
JSONArray jsonArray = JSONArray.fromObject(dataObj);
for(int i=0; i<jsonArray.size(); i++) {
String obj = new Gson().toJson(jsonArray.getJSONObject(i)); //This is where i'm getting an error
String className = getClassName(jsonArray.getJSONObject(i));
Class targetClass = null;
try {
targetClass = Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//Create Object
Object data = new Gson().fromJson(obj, targetClass);
我张贴的相关代码,for循环不会关闭,因为该代码的其余部分是相当长的,而这正是我得到错误的部分。
net.sf.json.JSONException: JSONArray[0] is not a JSONObject.
这是什么json数组看起来像从JavaScript传入时。这是jsonArray对象的println。
[{"number":"(123) 456-7050","type":"Home","contactId":1,"id":16662,"className":"beans.PhoneNumber","position":0}]
这段代码有一个对象,这段代码有效。但一旦我得到2或更多,我的错误出现了。
[[{"number":"(123) 456-7050","type":"Home","contactId":1,"id":16662,"className":"beans.PhoneNumber","position":1},{"number":"(555) 555-1233","type":"Mobile","contactId":1,"id":16656,"className":"beans.PhoneNumber","position":0},{"number":"(999) 999-9999","type":"Home","contactId":1,"id":16664,"className":"beans.PhoneNumber","position":3},{"number":"(222) 222-2222","type":"Home","contactId":1,"id":16666,"className":"beans.PhoneNumber","position":4}]]
它几乎看起来当我路过一个以上的对象一样,它创建一个数组,这可能是为什么它不工作的数组。但是当我从javascript传递一个jsonarray时,我该如何避免这样做呢?只使用dataObj,我无法访问大小或无法循环访问它。
当我在java中创建JSONArray时,它正在创建数组数组。所以我想原始dataObj字符串已经是一个数组,但我该如何转换为在Java中使用,所以我可以使用for循环等? – ryandlf 2012-01-13 14:26:20
看看你的JavaScript。您似乎有一个将对象添加到数组的错误。我不能告诉你其他什么,因为你没有提供任何JavaScript上下文。 – 2012-01-13 14:35:20
在我的javascript我转换对象的数组,我在想什么是一个正确的jsonArray使用stringify。我证实这是问题,但我不知道如何避免它。在我调用javascript中数组的stringify之前,它是一个完美的JS数组。我是否应该以不同的方式为Java准备解析它? – ryandlf 2012-01-13 14:43:27