Я передаю объект json из javascript в Java-сервлет, используя ajax.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);
Я отправляю соответствующий код, для цикла не закрыт, так как остальная часть кода довольно долго, и это та часть, где я получаю сообщение об ошибке.
net.sf.json.JSONException: JSONArray[0] is not a JSONObject.
Вот что представляет собой массив json, когда он прошел через javascript. Это println объекта 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, я не имею доступа к размеру или не перебираю его.
Когда я создаю JSONArray в java, он создает массив массивов. Таким образом, я думаю, что исходная строка dataObj уже является массивом, но как мне преобразовать ее для использования в java, чтобы я мог использовать цикл for и т. Д.? – ryandlf
Посмотрите на свой JavaScript. Кажется, у вас есть ошибка, когда вы добавляете объекты в массив. Я не могу сказать вам ничего другого, потому что вы не указали никакого контекста JavaScript. –
В моем javascript я преобразовываю массив объекта в то, что я думаю, является правильным jsonArray, используя stringify. Я проверил, что это проблема, но я не знаю, как ее избежать. До того, как я вызову stringify в массиве в javascript, это отлично работающий массив JS. Должен ли я разбирать его в prep для Java по-другому? – ryandlf