Удаление объекта из массива Json в файл с помощью Джексона - PullRequest
0 голосов
/ 28 февраля 2019

Мой JSON выглядит следующим образом, и мне нужно удалить первый объект из secondArray.

{
   "firstArray":[
      {
         "data1":1,
         "data2":"DATA"
      },
      {
         "data1":2,
         "data2":"DATA2"
      }
   ],
   "secondArray":[
      {
         "number":1,
         "data":"DATA3",

      },
      {
         "number":2,
         "data":"DATA4"
      }
   ]
}

Это то, что у меня есть:

public boolean remove(SecondArray object) {
 try {
  ObjectNode root = (ObjectNode) mapper.readTree(jsonFile);
  ArrayNode array = (ArrayNode) root.get("secondArray");
  if (array.path("number").asInt() == object.getId()) {
   movieArray.remove(object.getId());
  }
  System.out.println(array.toString());

 } catch (IOException e) {
  e.printStackTrace();
 }
}

Мойпроблема в том, что object.getId() получает id как число, а в JSON оно входит внутрь "".Как мне сделать эту работу, чтобы я мог удалить объект, введенный из secondArray?

1 Ответ

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

Не удалять массив item на object.id.Удалите это index.Вам нужно перебрать массив, найти JSON Object где number = object.id и удалить его.Пример:

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

import java.io.File;

public class JsonApp {

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

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

        int numberToRemove = 1;
        for (int i = 0; i < array.size(); i++) {
            if (array.get(i).get("number").asInt() == numberToRemove) {
                array.remove(i);
                break;
            }
        }
        System.out.println(array);
        System.out.println(root);
    }
}

Над кодом напечатаны:

[{"number":2,"data":"DATA4"}]
{"firstArray":[{"data1":1,"data2":"DATA"},{"data1":2,"data2":"DATA2"}],"secondArray":[{"number":2,"data":"DATA4"}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...