Вы можете достичь того, чего хотите, используя библиотеку Джексона.Сначала получите rootNode, а затем дочерние узлы и получите элемент по указанному индексу.А затем создайте новый объект Book и добавьте его в массив book, используя метод addPojo.
Вот код:
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("test.json");
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(file);
JsonNode store = rootNode.get("store");
JsonNode books = store.get("book");
// get an element in that node
JsonNode bookElement = books.get(0);
Book book = new Book();
book.setAuthor("test");
book.setCategory("test");
book.setDisplayPrice("test");
book.setTitle("test");
// you can change the logic with editing following lines
// if has the desired field
if (bookElement.hasNonNull("origin")) {
// if field value is not equal to given text
if (!bookElement.get("origin").textValue().equalsIgnoreCase("burma")) {
((ArrayNode)books).addPOJO(book);
}
}
// write to file
mapper.writeValue(file, rootNode);
}
}
Класс книги:
@Data // comes from lombok for getter-setter
class Book {
private String category;
private String author;
private String title;
@JsonProperty("display-price")
private String displayPrice;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String isbn;
}
Если выимеют происхождение поля, и оно не равно "бирме", файл становится после добавления объекта:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"display-price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"display-price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"display-price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"display-price": 22.99
},
{
"category": "test",
"author": "test",
"title": "test",
"display-price": "test"
}
]
}
}
Джексон maven:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>