Seharusnya sangat sederhana, tapi aku tidak bisa menemukannya setelah mencoba selama satu jam #membuat.
Saya perlu mendapatkan string JSON, misalnya {"k1":v1,"k2":v2}
,, diuraikan sebagai a JsonNode
.
JsonFactory factory = new JsonFactory();
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = jp.readValueAsTree();
memberi
java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree
#embarrasing
- tidak. Jika hal-hal sederhana tidak sederhana, maka perancang API telah gagal, bukan Anda.Jawaban:
Sedikit variasi pada jawaban Richards tetapi
readTree
dapat mengambil string sehingga Anda dapat menyederhanakannya menjadi:sumber
ObjectNode
daripadaJsonNode
menggunakanmapper.valueToTree("{\"k1\":\"v1\"}")
Anda perlu menggunakan
ObjectMapper
:Dokumentasi lebih lanjut tentang membuat parser dapat ditemukan di sini .
sumber
mapper.treeToValue()
,. TetapireadValue()
juga berhasil.Varian ketiga:
sumber
JsonNode
. Namun, Anda biasanya tidak menginginkannyaJsonNode
, jadi saya ingin menunjukkan bagaimana cara memberi tahu Jackson nilai seperti apa yang Anda inginkan.JsonNode
tampaknya perlu untuk mencegah Jackson deserialisasi sebagai sesuatu yang lain - yang akan gagal.Jawaban Richard benar. Atau Anda juga dapat membuat
MappingJsonFactory
(diorg.codehaus.jackson.map
) yang tahu di mana menemukannyaObjectMapper
. Kesalahan yang Anda dapatkan adalah karena regulerJsonFactory
(daricore
paket) tidak memiliki ketergantungan keObjectMapper
(yang ada dalammapper
paket).Tetapi biasanya Anda hanya menggunakan
ObjectMapper
dan tidak mengkhawatirkanJsonParser
atau komponen tingkat rendah lainnya - mereka hanya akan diperlukan jika Anda ingin mengikat bagian-bagian aliran data, atau melakukan penanganan tingkat rendah.sumber
sumber
Pendekatan baru terhadap pertanyaan lama. Solusi yang berfungsi dari java 9+
lebih mudah dibaca dan dipelihara untuk objek yang kompleks. Ej
sumber