Я передаю объект json из javascript в java-сервлет, используя ajax.
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.
[{"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}]]
Это выглядит так, будто я передаю более одного объекта, это создает массив массива, что может быть причинойэто не работает.Но как мне избежать этого, когда я передаю jsonarray из javascript?Используя только dataObj, у меня нет доступа к размеру или циклу.