Saya mencoba melakukan sesuatu seperti ini tetapi tidak berhasil:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
Namun IDE mengatakan:
Tugas tidak dicentang
Map to Map<String,String>
Apa cara yang benar untuk melakukan ini? Saya hanya menggunakan Jackson karena itulah yang sudah tersedia dalam proyek ini, apakah ada cara Java asli untuk mengkonversi ke / dari JSON?
Dalam PHP saya hanya json_decode($str)
dan saya akan kembali array. Saya pada dasarnya membutuhkan hal yang sama di sini.
Jawaban:
Saya mendapat kode berikut:
Itu membaca dari file, tetapi
mapper.readValue()
juga akan menerimaInputStream
dan Anda dapat memperolehInputStream
dari string dengan menggunakan yang berikut:Ada sedikit penjelasan tentang mapper di blog saya .
sumber
JsonFactory
tidak diperlukan.ObjectMapper
dapat membuatnya secara otomatis sendiri.Map<String, String>
dan Anda berikanMap<String, Object>
.mapper.writeValueAsString(hashmap)
Coba
TypeFactory
. Berikut kode untuk Jackson JSON (2.8.4).Berikut kode untuk Jackson JSON versi yang lebih lama.
sumber
Peringatan yang Anda dapatkan dilakukan oleh kompiler, bukan oleh perpustakaan (atau metode utilitas).
Cara paling mudah menggunakan Jackson secara langsung adalah:
Metode utilitas yang Anda panggil mungkin hanya melakukan sesuatu yang mirip dengan ini.
sumber
Map<String, String>
dan Anda telah menyediakanMap<String, Object>
.Perhatikan bahwa
reader
instance adalah Thread Safe.sumber
Map<String, String>
dan Anda telah menyediakanMap<String, Object>
.Konversi dari String ke JSON Map:
sumber
Type safety: The expression of type HashMap needs unchecked conversion to conform to Map<String,String>
. Meskipun ini dapat ditekan dengan@SuppressWarnings
anotasi, saya akan merekomendasikan menggunakanTypeReference
pertama atau casting selanjutnya seperti yang disebutkan oleh Staxmanmap = mapper.readValue(string, map.getClass());
- mengingat bahwa Anda telah instantiated peta, seperti halnya di sini.Saya pikir ini akan menyelesaikan masalah Anda.
sumber
Berikut ini berfungsi untuk saya:
di mana
getJsonAsMap
didefinisikan seperti ini:Perhatikan bahwa ini akan gagal jika Anda memiliki objek anak di json Anda (karena mereka bukan a
String
, mereka yang lainHashMap
), tetapi akan berfungsi jika json Anda adalah daftar nilai kunci dari properti seperti:sumber
Menggunakan Google Gson
Mengapa tidak menggunakan Google Gson seperti yang disebutkan di sini ?
Sangat lurus ke depan dan melakukan pekerjaan untuk saya:
sumber
Ini adalah solusi umum untuk masalah ini.
Semoga suatu hari nanti seseorang akan berpikir untuk membuat metode util untuk mengkonversi ke jenis Kunci / nilai Peta maka jawaban ini :)
sumber
hanya ingin memberikan jawaban Kotlin
sumber