Saya perlu mengubah nilai atribut JSON di Java, saya bisa mendapatkan nilainya dengan benar tetapi saya tidak dapat memodifikasi JSON.
berikut adalah kode di bawah ini
JsonNode blablas = mapper.readTree(parser).get("blablas");
for (JsonNode jsonNode : blablas) {
String elementId = jsonNode.get("element").asText();
String value = jsonNode.get("value").asText();
if (StringUtils.equalsIgnoreCase(elementId, "blabla")) {
if(value != null && value.equals("YES")){
// I need to change the node to NO then save it into the JSON
}
}
}
Apa cara terbaik untuk melakukannya?
resultMap = mapper.convertValue(aJsonNode, Map.class);
memodifikasinya di Map dan kemudian mengubah Map itu kembali menjadi JsonNode. Hanya mengatakan.Jawaban:
JsonNode
tidak dapat diubah dan dimaksudkan untuk operasi penguraian. Namun, itu bisa dilemparkan keObjectNode
(danArrayNode
) yang memungkinkan mutasi:Untuk sebuah array, Anda dapat menggunakan:
sumber
Exception in thread "main" java.lang.ClassCastException: com.fasterxml.jackson.databind.node.IntNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode
Menambahkan jawaban karena beberapa orang lain telah memberi suara positif di komentar jawaban yang diterima, mereka mendapatkan pengecualian ini ketika mencoba mentransmisikan ke ObjectNode (termasuk saya sendiri):
Solusinya adalah mendapatkan node 'induk', dan melakukan a
put
, secara efektif menggantikan seluruh node, terlepas dari jenis node aslinya.Jika Anda perlu "mengubah" node menggunakan nilai node yang ada:
get
nilai / larik dariJsonNode
put
orang tua.Kode, yang tujuannya adalah untuk memodifikasi
subfield
, yang merupakan simpul anak dariNodeA
danNode1
:Kredit:
Saya mendapat inspirasi ini dari sini , terima kasih kepada wassgreen @
sumber
Jawaban @ Sharon-Ben-Asher tidak apa-apa.
Tetapi dalam kasus saya, untuk array saya harus menggunakan:
sumber
Saya pikir Anda bisa melemparkan ke ObjectNode dan menggunakan
put
metode. Seperti iniObjectNode o = (ObjectNode) jsonNode; o.put("value", "NO");
sumber
Anda perlu mendapatkan
ObjectNode
tipe objek untuk mengatur nilai. Coba lihat inisumber
Hanya demi pemahaman orang lain yang mungkin tidak mendapatkan gambaran keseluruhan, kode berikut jelas berfungsi bagi saya untuk menemukan bidang dan kemudian memperbaruinya
sumber