Saya memiliki teks JSON berikut. Bagaimana saya bisa mengurai untuk mendapatkan nilai-nilai pageName
, pagePic
, post_id
, dll?
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
Jawaban:
The org.json perpustakaan mudah digunakan. Contoh kode di bawah ini:
Anda dapat menemukan lebih banyak contoh dari: Parse JSON di Jawa
Gelas yang dapat diunduh: http://mvnrepository.com/artifact/org.json/json
sumber
org.json
lebih dari pustaka lain untuk parsing JSON sederhana tanpa melihat. Ini adalah pustaka referensi yang dibuat oleh Douglas Crockford (penemu JSON).Demi contoh, mari kita asumsikan Anda memiliki kelas
Person
hanya denganname
.Google GSON ( Maven )
Favorit pribadi saya tentang serialisasi objek / de-serialisasi JSON yang hebat.
Memperbarui
Jika Anda ingin mengeluarkan satu atribut, Anda juga dapat melakukannya dengan mudah menggunakan Google library:
Org.JSON ( Maven )
Jika Anda tidak memerlukan objek dererialisasi tetapi hanya untuk mendapatkan atribut, Anda dapat mencoba org.json ( atau lihat contoh GSON di atas! )
Jackson ( Maven )
sumber
JsonNode
s, GSON memiliki sesuatu yang serupa). Mungkin baik untuk menunjukkan cuplikan, karena itu mirip dengan satu-satunya cara yang ditawarkan org.json.Jika seseorang ingin membuat objek Java dari JSON dan sebaliknya, gunakan guci pihak ketiga GSON atau JACKSON dll.
Tetapi jika seseorang hanya ingin mengurai string JSON dan mendapatkan beberapa nilai, (ATAU membuat string JSON dari awal untuk mengirim kawat) cukup gunakan jar JaveEE yang berisi JsonReader, JsonArray, JsonObject dll. Anda mungkin ingin mengunduh implementasi itu spek seperti javax.json. Dengan dua toples ini saya dapat mengurai json dan menggunakan nilai-nilai.
API ini sebenarnya mengikuti model parsing XML DOM / SAX.
sumber
parser quick-json sangat mudah, fleksibel, sangat cepat dan dapat disesuaikan. Cobalah
Fitur:
Dapat digunakan seperti ini:
sumber
Anda dapat menggunakan Google Gson .
Menggunakan perpustakaan ini Anda hanya perlu membuat model dengan struktur JSON yang sama. Kemudian model secara otomatis diisi. Anda harus memanggil variabel Anda sebagai kunci JSON Anda, atau gunakan
@SerializedName
jika Anda ingin menggunakan nama yang berbeda.JSON
Dari contoh Anda:
Model
Parsing
Sekarang Anda dapat menguraikan menggunakan pustaka Gson:
Impor gradle
Ingatlah untuk mengimpor perpustakaan di file Gradle aplikasi
Pembuatan model otomatis
Anda dapat membuat model dari JSON secara otomatis menggunakan alat online seperti ini .
sumber
Hampir semua jawaban yang diberikan memerlukan deserialisasi penuh JSON menjadi objek Java sebelum mengakses nilai di properti yang menarik. Alternatif lain, yang tidak menggunakan rute ini adalah menggunakan JsonPATH yang seperti XPath untuk JSON dan memungkinkan melintasi objek JSON.
Ini adalah spesifikasi dan orang-orang baik di JayWay telah membuat implementasi Java untuk spesifikasi yang dapat Anda temukan di sini: https://github.com/jayway/JsonPath
Jadi pada dasarnya untuk menggunakannya, tambahkan ke proyek Anda, misalnya:
dan untuk menggunakan:
dll ...
Periksa halaman spesifikasi JsonPath untuk informasi lebih lanjut tentang cara-cara lain untuk melintang JSON.
sumber
A - Penjelasan
Anda bisa menggunakan perpustakaan Jackson , untuk mengikat JSON String ke instance POJO ( Plain Old Java Object ). POJO hanyalah sebuah kelas dengan hanya bidang pribadi dan metode pengambil / penyetel publik. Jackson akan melintasi metode (menggunakan refleksi ), dan memetakan objek JSON ke dalam contoh POJO karena nama bidang kelas cocok dengan nama bidang objek JSON.
Dalam objek JSON Anda, yang sebenarnya merupakan objek komposit , objek utama terdiri dari dua sub-objek. Jadi, kelas POJO kami harus memiliki hierarki yang sama. Saya akan memanggil seluruh Objek JSON sebagai objek Halaman . Objek halaman terdiri dari objek PageInfo , dan array objek Post .
Jadi kita harus membuat tiga kelas POJO berbeda;
Satu-satunya paket yang saya gunakan adalah Jackson ObjectMapper, yang kami lakukan adalah mengikat data;
Ketergantungan yang diperlukan, file jar tercantum di bawah ini;
Ini kode yang diperlukan;
B - Kelas POJO Utama: Halaman
C - Child POJO Class: PageInfo
D - Anak POJO Kelas: Posting
E - Contoh File JSON: sampleJSONFile.json
Saya baru saja menyalin sampel JSON Anda ke file ini dan meletakkannya di bawah folder proyek.
F - Kode Demo
G - Output Demo
sumber
Gunakan minimal-json yang sangat cepat dan mudah digunakan. Anda dapat menguraikan dari String obj dan Stream.
Contoh data:
Parsing:
Membuat JSON:
Maven:
sumber
Saya percaya praktik terbaik harus melalui API Java JSON resmi yang masih dalam proses.
sumber
Karena belum ada yang menyebutkannya, ini adalah awal dari solusi menggunakan Nashorn (JavaScript runtime bagian dari Java 8, tetapi sudah tidak digunakan lagi di Java 11).
Larutan
Perbandingan kinerja
Saya menulis konten JSON yang mengandung tiga array masing-masing 20, 20 dan 100 elemen. Saya hanya ingin mendapatkan 100 elemen dari array ketiga. Saya menggunakan fungsi JavaScript berikut untuk mem-parsing dan mendapatkan entri saya.
Menjalankan panggilan jutaan kali menggunakan Nashorn membutuhkan waktu 7,5 ~ 7,8 detik
org.json membutuhkan waktu 20 ~ 21 detik
Jackson membutuhkan waktu 6,5 ~ 7 detik
Dalam hal ini Jackson berkinerja lebih baik daripada Nashorn, yang berkinerja lebih baik daripada org.json. Nashorn API lebih sulit digunakan daripada org.json atau Jackson. Tergantung pada kebutuhan Anda, Jackson dan Nashorn keduanya bisa menjadi solusi yang layak.
sumber
"
"? Bukan inci? Apakah ini detik? Menit?ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.eval("var fun = function(raw) { return JSON.parse(raw); };"); Map<String, Object> json = (Map<String, Object>) ((Invocable) engine).invokeFunction("fun", jsonString);
Contoh di bawah ini menunjukkan cara membaca teks dalam pertanyaan, direpresentasikan sebagai variabel "jsonText". Solusi ini menggunakan Java EE7 javax.json API (yang disebutkan dalam beberapa jawaban lain). Alasan saya menambahkannya sebagai jawaban terpisah adalah bahwa kode berikut ini menunjukkan bagaimana sebenarnya mengakses beberapa nilai yang ditunjukkan dalam pertanyaan. Sebuah pelaksanaan javax.json API akan diperlukan untuk membuat kode ini dijalankan. Paket lengkap untuk masing-masing kelas yang diperlukan dimasukkan karena saya tidak ingin mendeklarasikan pernyataan "impor".
Sekarang, sebelum siapa pun pergi dan turunkan jawaban ini karena tidak menggunakan GSON, org.json, Jackson, atau kerangka kerja pihak ketiga lainnya yang tersedia, ini merupakan contoh "kode wajib" per pertanyaan untuk menguraikan teks yang disediakan. Saya sangat menyadari bahwa kepatuhan terhadap standar JSR 353 saat ini tidak dipertimbangkan untuk JDK 9 dan karenanya spesifikasi JSR 353 harus diperlakukan sama dengan implementasi penanganan JSON pihak ketiga lainnya.
sumber
Ini mengejutkan saya dengan betapa mudahnya itu. Anda bisa meneruskan
String
memegang JSON Anda ke konstruktor JSONObject dalam paket org.json default.Selesai Mikrofon tetes . Ini bekerja dengan
JSONObjects
baik. Setelah itu, Anda bisa melihat melalui hierarki AndaObjects
menggunakanget()
metode pada objek Anda.sumber
JSONArray
jenis bukan bagian dari API J2SE JDK dan Anda tidak mengatakan yang API atau perpustakaan pihak ketiga menyediakan jenis ini.Ada banyak perpustakaan JSON yang tersedia di Jawa.
Yang paling terkenal adalah: Jackson, GSON, Genson, FastJson dan org.json.
Biasanya ada tiga hal yang harus diperhatikan untuk memilih perpustakaan apa pun:
Khusus untuk perpustakaan JSON (dan sembarang serialisasi / deserialisasi), penyatuan data juga biasanya menarik karena menghilangkan kebutuhan untuk menulis kode boiler-plate untuk mengemas / membongkar data.
Untuk 1, lihat patokan ini: https://github.com/fabienrenaud/java-json-benchmark Saya memang menggunakan JMH yang membandingkan (jackson, gson, genson, fastjson, org.json, jsonp) kinerja serializer dan deserializer menggunakan stream dan API databind. Untuk 2, Anda dapat menemukan banyak contoh di Internet. Tolok ukur di atas juga dapat digunakan sebagai sumber ...
Pengambilan cepat patokan: Jackson berkinerja 5 hingga 6 kali lebih baik daripada org.json dan lebih dari dua kali lebih baik daripada GSON.
Untuk contoh khusus Anda, kode berikut menerjemahkan json Anda dengan jackson:
Beri tahu saya jika Anda memiliki pertanyaan.
sumber
Selain jawaban lain, saya merekomendasikan jsonschema2pojo.org untuk layanan opensource online ini untuk menghasilkan kelas Java dari skema json atau json untuk GSON, Jackson 1.x atau Jackson 2.x. Misalnya, jika Anda memiliki:
The jsonschema2pojo.org untuk GSON dihasilkan:
sumber
Jika Anda memiliki beberapa kelas Java (katakanlah Pesan) yang mewakili string JSON (jsonString), Anda dapat menggunakan perpustakaan Jackson JSON dengan:
dan dari objek pesan Anda dapat mengambil atributnya.
sumber
Gson mudah dipelajari dan diimplementasikan, yang perlu kita ketahui adalah mengikuti dua metode
toJson () - Konversi objek Java ke format JSON
fromJson () - Mengubah JSON menjadi objek Java
`
`
sumber
Ada banyak perpustakaan open source yang hadir untuk mem-parsing konten JSON ke objek atau hanya untuk membaca nilai-nilai JSON. Persyaratan Anda hanya untuk membaca nilai dan menguraikannya ke objek kustom. Jadi perpustakaan org.json sudah cukup dalam kasus Anda.
Gunakan pustaka org.json untuk menguraikannya dan membuat JsonObject:
Sekarang, gunakan objek ini untuk mendapatkan nilai Anda:
Anda dapat melihat contoh lengkap di sini:
Cara mengurai JSON di Jawa
sumber
Tolong lakukan sesuatu seperti ini:
sumber
Anda bisa menggunakan Pustaka Gson untuk mengurai string JSON.
Anda juga dapat mengulang melalui array "posting" seperti:
sumber
sumber
Baca posting blog berikut, JSON di Jawa .
Posting ini agak lama, tetapi saya masih ingin menjawab pertanyaan Anda.
Langkah 1: Buat kelas POJO dari data Anda.
Langkah 2: Sekarang buat objek menggunakan JSON.
Untuk referensi lebih lanjut, Anda dapat merujuk ke tautan berikut .
sumber
Jawaban teratas pada halaman ini menggunakan contoh yang terlalu sederhana seperti objek dengan satu properti (mis {{name: value}). Saya pikir itu masih sederhana tetapi contoh kehidupan nyata dapat membantu seseorang.
Jadi ini JSON yang dikembalikan oleh Google Translate API:
Saya ingin mengambil nilai atribut "translationText" misalnya "Arbeit" menggunakan Google Gson.
Dua kemungkinan pendekatan:
Ambil hanya satu atribut yang diperlukan
Buat objek Java dari JSON
...
sumber
Pertama, Anda perlu memilih perpustakaan implementasi untuk melakukannya.
The API Java untuk JSON Pengolahan (JSR 353) menyediakan API portabel untuk mengurai, menghasilkan, mengubah, dan permintaan JSON menggunakan model objek dan mengalir API.
The implementasi referensi di sini: https://jsonp.java.net/
Di sini Anda dapat menemukan daftar implementasi JSR 353:
Apa API yang mengimplementasikan JSR-353 (JSON)
Dan untuk membantu Anda memutuskan ... Saya menemukan artikel ini juga:
http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/
Jika Anda menggunakan Jackson, berikut adalah artikel bagus tentang konversi antara JSON ke / dari Jawa menggunakan Jackson: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json- jackson /
Semoga ini bisa membantu!
sumber
Anda dapat menggunakan Jayway JsonPath . Di bawah ini adalah tautan GitHub dengan kode sumber, detail pom, dan dokumentasi yang baik.
https://github.com/jayway/JsonPath
Ikuti langkah-langkah di bawah ini.
Langkah 1 : Tambahkan ketergantungan jalur JSON jayway di jalur kelas Anda menggunakan Maven atau unduh file JAR dan tambahkan secara manual.
Langkah 2 : Silakan simpan input JSON Anda sebagai file untuk contoh ini. Dalam kasus saya, saya menyimpan JSON Anda sebagai sampleJson.txt. Perhatikan bahwa Anda melewatkan koma antara pageInfo dan postingan.
Langkah 3 : Baca konten JSON dari file di atas menggunakan bufferedReader dan simpan sebagai String.
Langkah 4 : Parsing string JSON Anda menggunakan parser JSON Jayway.
Langkah 5 : Baca detailnya seperti di bawah ini.
Outputnya adalah :
sumber
Saya punya JSON seperti ini:
Kelas Java
Kode untuk mengubah JSON ini ke kelas Java.
Maven
sumber
Orang dapat menggunakan anotasi Apache @Model untuk membuat kelas model Java yang mewakili struktur file JSON dan menggunakannya untuk mengakses berbagai elemen di pohon JSON . Tidak seperti solusi lain yang satu ini bekerja sepenuhnya tanpa refleksi dan karenanya cocok untuk lingkungan di mana refleksi tidak mungkin atau datang dengan overhead yang signifikan.
Ada contoh proyek Maven yang menunjukkan penggunaannya. Pertama-tama ia mendefinisikan struktur:
dan kemudian menggunakan kelas RepositoryInfo dan Pemilik yang dihasilkan untuk mengurai aliran input yang disediakan dan mengambil informasi tertentu sambil melakukan itu:
Hanya itu saja! Selain itu di sini adalah inti langsung yang menunjukkan contoh serupa bersama-sama dengan komunikasi jaringan asinkron.
sumber
jsoniter
(jsoniterator) adalah perpustakaan json yang relatif baru dan sederhana, dirancang untuk menjadi sederhana dan cepat. Yang perlu Anda lakukan untuk menghapus data json adalahdi mana
jsonData
string data json.Lihatlah situs web resmi untuk informasi lebih lanjut.
sumber
Kita bisa menggunakan kelas JSONObject untuk mengonversi string JSON ke objek JSON, dan untuk beralih ke objek JSON. Gunakan kode berikut.
sumber
Anda dapat menggunakan parsing pustaka stream DSM untuk parsing json kompleks dan dokumen XML. DSM mem-parsing data hanya sekali dan tidak memuat semua data ke dalam memori.
Katakanlah kita memiliki kelas Page untuk menghapus data json yang diberikan.
Kelas halaman
Buat file Pemetaan yaml.
Gunakan DSM untuk mengekstrak bidang.
variabel halaman diserialisasi ke json:
DSM sangat baik untuk json dan xml yang kompleks.
sumber
Anda bisa menggunakan
JsonNode
representasi pohon terstruktur dari string JSON Anda. Itu adalah bagian dari pustaka rock solid jackson yang ada di mana-mana.sumber