Вставить новый элемент в JSONArray

#java #json #eclipse

#java #json #eclipse

Вопрос:

У меня есть JSONArray, который состоит из множества массивов. Мне нужно вставить новый элемент в начало каждого из этих массивов.

Я попытался обойти его, чтобы извлечь каждый из массивов и вставить новый элемент, но это не сработало.

Я попытался обойти его, чтобы извлечь каждый из массивов и вставить новый элемент, но это не сработало.

 for (int i=0; i<consultaArray.size();i  )
   {
    JsonElement elemento = consultaArray.get(i);
        JsonObject item = new JsonObject();  
        item.addProperty("Prueba", "Prueba");
 } 
  

Структура является [{"key1":"value1","key2":"value2"},{....},....]

Он должен вставить новый элемент в каждый из массивов JSONArray

Комментарии:

1. Ну, вы ничего не делаете с elemento и item , так что же вы ожидаете, что произойдет? Предполагая, что вы хотите добавить item в consultaArray , вам пришлось бы сдвинуть все элементы вправо на единицу, а затем установить элементу индекс 0. Однако JsonArray объекты могут уже предоставлять методы для добавления элементов с определенными индексами.

2. Какую библиотеку вы используете, Gson ? Как выглядит ваш ввод JSON ? Что-то вроде этого: [[{"a":1,"b":2}, {...}, ...],[{"a":3, "b":4}, ...]] ? Не могли бы вы показать нам входные данные JSON ? Вы хотите добавить один и тот же новый узел в каждый массив?

3. ‘это не работает’ ничего не значит. Какую библиотеку вы используете? Что является исключением?

4. Да, я использую gson, и структура такова, [[{«a»:1,»b»:2}, {…}, …],[{» a»: 3, «b»: 4}, …]]. Да, мне нужно добавить то же значение, оно должно быть [[{«c»: 3, «a»: 1, «b»:2}, {…}, …],[{» c»:3,»a»:3, «b»:4}, …]]

5. Если я правильно понимаю, вы изменили каждый JSON объект на первом месте в каждом массиве, добавив новое свойство: "c":3 . Итак, вы не хотите добавлять новый объект. Вы хотите добавить новое свойство к существующему объекту в 0-index в каждом массиве. Я прав?

Ответ №1:

Я использую Gson 2.8.5 для этого кода

 String jsonArrayStr = "[[{'key1':'value1'},{...}],[{'key1':'value1'},{...}]]";

JsonArray consultaArray = (JsonArray) new JsonParser().parse(jsonArrayStr);
JsonArray finalJsonArray = new JsonArray();

for (JsonElement arrEl : consultaArray) {
    JsonArray elemento = (JsonArray) arrEl;
    JsonArray finalArr = new JsonArray();
    JsonObject item = new JsonObject();
    item.addProperty("Prueba", "Prueba");

    finalArr.add(item);
    for (JsonElement el : elemento) {
        finalArr.add(el);
    }

    finalJsonArray.add(finalArr);
}
  

Конечный массив

 [[{"Prueba":"Prueba"},{"key1":"value1"},{...}],[{"Prueba":"Prueba"},{"key1":"value1"},{...}]]
  

Я вставляю новый элемент в начальную точку массива. Если вам это не нужно, удалите цикл «for» и используйте youJsonArray.add()

Комментарии:

1. Это приводит к следующей ошибке java.lang. ClassCastException: com.google.gson. JSONObject не может быть приведен к com.google.gson. JSONArray в строке JSONArray elemento = (JSONArray) arrEl;

2. @FranciscoJavierBonilloPonce Вы удаляете элемент {…}? Мой полный jsonArrayStr «[[{‘key1’: ‘value1’},{‘key2′:’value2’}], [{‘key1′:’value1’}, {‘key2’: ‘value2’}]]» отлично работает.

Ответ №2:

Основываясь на вашем примере, zdadco, я сделал следующее:

          JsonArray consultaArray = getFields(querySQL);         
         JsonArray finalJsonArray = new JsonArray();

         for (JsonElement arrEl : consultaArray) 
         {              
            JsonObject obj = arrEl.getAsJsonObject();
            JsonObject item = new JsonObject();
            JsonArray finalArr = new JsonArray();                                      
            item.addProperty("Test", "Test");
            finalArr.add(item);
            finalArr.add(arrEl);
            finalJsonArray.add(finalArr);   
        }   
  

И в результате получается:
Перед [[{"ID":"70","Org":"Townhall","..",.....}]]
После : [[{"Test":"Test"},{"ID":"70","Org":"Townhall","..",.......}]]