Добавление вложенного массива в существующий массив в файл JSON - PullRequest
0 голосов
/ 28 февраля 2019

Попытка добавить вложенный массив в массив в JSON.

 public SecondArray createOrUpdate(SecondArray object) {
  try {
   ObjectMapper mapper = new ObjectMapper();
   ObjectNode root = (ObjectNode) mapper.readTree(jsonFile);
   ObjectNode newArrayElement = new ObjectNode(mapper.getNodeFactory());
   ObjectNode newItem = new ObjectNode(mapper.getNodeFactory());
   ArrayNode secondArr = (ArrayNode) root.get("secondArray");
   newArrayElement.put("number", object.getNumber());
   newArrayElement.put("data", object.getData);

   for (SecondArray.Item items: object.getItems()) {
    newItem.put("item1", items.getItem1));
   newItem.put("item2", items.getItem2);
  }
  secondArr.add(mapper.convertValue(newArrayElement, JsonNode.class));
  return object;
 } catch (IOException e) {
  e.printStackTrace();
 }
 }

Иметь этот вход JSON:

{
   "firstArray":[
      {
         "data1":1,
         "data2":"DATA"
      },
      {
         "data1":2,
         "data2":"DATA2"
      }
   ],
   "secondArray":[
      {
         "number":1,
         "data":"DATA3",
         "items":[
            {
               "item1":"sword",
               "item2":"mace"
            },
            {
               "item1":"dagger",
               "item2":"axe"
            }
         ]
      }
   ]
}

Необходимо добавить новый объект всуществующий secondArray с такими же атрибутами.В настоящее время я получаю что-то вроде этого:

{
   "firstArray":[
      {
         "data1":1,
         "data2":"DATA"
      },
      {
         "data1":2,
         "data2":"DATA2"
      }
   ],
   "secondArray":[
      {
         "number":1,
         "data":"DATA3",
         "items":[
            {
               "item1":"sword",
               "item2":"mace"
            },
            {
               "item1":"dagger",
               "item2":"axe"
            }
         }
      ],
      {
         "number":2,
         "data":"DATA4",
         "items":[
            {
               "item1":"NEWITEM3",
               "item2":"NEWITEM4"
            }
         ]
      }
   }
]
}

Как мне получить мой код для добавления newArrayElement к secondArray с newArrayElement, имеющим по крайней мере 2 массива newItems внутри newArrayelement

1 Ответ

0 голосов
/ 28 февраля 2019

Вам нужно создать newItem для каждого Item в коллекции.Кроме того, не забудьте добавить его в массив в конце.Ниже вы можете найти пример, который для данной JSON полезной нагрузки добавляет новый item:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.io.File;
import java.util.Arrays;
import java.util.List;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);

        SecondArray secondArray = new SecondArray();

        ObjectNode root = (ObjectNode) mapper.readTree(jsonFile);
        ArrayNode array = (ArrayNode) root.get("secondArray");

        // create new item
        ObjectNode newObject = mapper.createObjectNode();
        newObject.put("number", 2);
        newObject.put("data", "DATA4");

        // new array for items
        ArrayNode items = mapper.createArrayNode();
        for (SecondArray.Item item : secondArray.getItems()) {
            // new item
            ObjectNode newItem = mapper.createObjectNode();
            newItem.put("item1", item.getItem1());
            newItem.put("item2", item.getItem2());

            // add item to array
            items.add(newItem);
        }

        // add array to new object
        newObject.set("items", items);

        // add created object to secondArray
        array.add(newObject);

        System.out.println(mapper.writeValueAsString(root));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...