【发布时间】:2012-01-13 07:30:28
【问题描述】:
我正在使用 ajax 将 json 对象从 javascript 传递到 java servlet。
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.
这是从 javascript 传入的 json 数组的样子。这是 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 javascript json gson