Bagaimana cara memvalidasi string JSON di Java? Atau bisakah saya menguraikannya menggunakan ekspresi reguler?
java
json
validation
sappu
sumber
sumber
Jawaban:
Gagasan liar, coba parsing dan tangkap pengecualian:
Kode ini menggunakan implementasi JSON API org.json yang tersedia di github , dalam maven dan sebagian di Android .
sumber
Perpustakaan JACKSON
Salah satu opsi adalah menggunakan perpustakaan Jackson . Impor versi terbaru (sekarang adalah):
Kemudian, Anda dapat menerapkan jawaban yang benar sebagai berikut:
Opsi Google GSON
Pilihan lain adalah menggunakan Google Gson . Impor ketergantungan:
Sekali lagi, Anda dapat mengimplementasikan solusi yang diusulkan sebagai:
Tes sederhana berikut di sini:
Harap perhatikan bahwa mungkin ada masalah "minor" karena trailing koma yang akan diperbaiki dalam rilis
3.0.0
.sumber
new ObjectMapper().readTree("28xjRBuOQqupRopHeSuhRQ")
mem-parsing tanpa Exception as IntNode (28). Tidak terlalu diharapkan ...Dengan Google Gson Anda dapat menggunakan JsonParser:
sumber
Anda bisa menggunakan .mayBeJSON (String str) yang tersedia di perpustakaan JSONUtils .
sumber
Itu tergantung pada apa yang Anda coba buktikan dengan validasi Anda. Tentu saja mengurai json seperti yang orang lain sarankan lebih baik daripada menggunakan regex, karena tata bahasa json lebih rumit daripada yang bisa diwakili dengan hanya regex.
Jika json hanya akan diuraikan oleh kode java Anda, maka gunakan parser yang sama untuk memvalidasinya.
Tetapi hanya parsing tidak selalu memberi tahu Anda apakah itu akan diterima di lingkungan lain. misalnya
Jika validasi Anda harus sangat menyeluruh, Anda dapat:
sumber
Silakan unduh perpustakaan stringtree-json
sumber
Sedikit tentang parsing:
Json, dan bahkan semua bahasa, menggunakan tata bahasa yang merupakan seperangkat aturan yang dapat digunakan sebagai pengganti. untuk mem-parse json, Anda pada dasarnya harus mengerjakan penggantian itu secara terbalik
Json adalah tata bahasa bebas konteks , yang berarti Anda dapat memiliki objek / array yang tak terbatas bersarang dan json akan tetap valid. regex hanya menangani tata bahasa reguler (karenanya 'reg' dalam nama), yang merupakan bagian dari tata bahasa bebas konteks yang tidak memungkinkan bersarang tanpa batas, jadi tidak mungkin untuk menggunakan hanya regex untuk mem-parsing semua json yang valid. Anda bisa menggunakan satu set regex yang rumit dan loop dengan asumsi bahwa tidak ada yang akan bersarang melewati, 100 level dalam, tetapi itu masih akan sangat sulit.
jika Anda bangun untuk menulis parser
Anda sendiri, Anda bisa membuat parser keturunan rekursif setelah Anda menyusun tata bahasa
sumber
Periksa apakah string yang diberikan adalah JSON yang valid di Kotlin . Saya mengonversi jawaban MByD Java ke Kotlin
sumber
Di sini Anda dapat menemukan alat yang dapat memvalidasi file JSON, atau Anda bisa membatalkan deserialisasi file JSON Anda dengan pustaka JSON mana pun dan jika operasi berhasil maka itu harus valid ( google-json misalnya yang akan memberikan pengecualian jika input itu parsing bukan JSON yang valid).
sumber
Menggunakan Playframework 2.6, pustaka Json yang ditemukan di java api juga dapat digunakan untuk mengurai string. String dapat berupa elemen json dari json array. Karena nilai yang dikembalikan tidak penting di sini kita hanya menangkap kesalahan parse untuk menentukan bahwa string tersebut adalah string json yang benar atau tidak.
sumber
IMHO, cara paling elegan adalah menggunakan Java API untuk JSON Processing (JSON-P), salah satu standar JavaEE yang sesuai dengan JSR 374 .
Menggunakan Maven, tambahkan ketergantungan pada JSON-P:
Kunjungi halaman resmi JSON-P untuk informasi lebih lanjut.
sumber
Berikut adalah contoh kerja untuk parsing json ketat dengan pustaka gson :
Lihat juga jawaban terperinci saya yang lain di Cara memeriksa apakah JSON valid di Java menggunakan GSON dengan info lebih lanjut dan perpanjangan test case dengan berbagai contoh tidak valid.
sumber
Seperti yang Anda lihat, ada banyak solusi, mereka sebagian besar mengurai JSON untuk memeriksanya dan pada akhirnya Anda harus menguraikannya untuk memastikan.
Tetapi, tergantung pada konteksnya, Anda dapat meningkatkan kinerja dengan pemeriksaan awal.
Apa yang saya lakukan ketika saya memanggil API, hanya memeriksa bahwa karakter pertama adalah '{' dan yang terakhir adalah '}'. Jika bukan itu masalahnya, saya tidak perlu repot-repot membuat parser.
sumber
Saya telah menemukan solusi yang sangat sederhana untuk itu.
Silakan instal pustaka ini terlebih dahulu
net.sf.json-lib
untuk itu.Selesai Nikmati
sumber
Jawabannya sebagian benar. Saya juga menghadapi masalah yang sama. Mem-parsing json dan memeriksa pengecualian sepertinya cara biasa tetapi solusi gagal untuk input json seperti
{"outputValueSchemaFormat": "", "sortByIndexInRecord": 0, "sortOrder": 847874874387209 "descending"} kajhfsadkjh
Seperti yang Anda lihat, json tidak valid karena ada karakter jejak trailing. Tetapi jika Anda mencoba mem-parsing json di atas menggunakan jackson atau gson maka Anda akan mendapatkan peta parsing dari json yang valid dan karakter sisa jejak diabaikan. Yang bukan solusi yang diperlukan ketika Anda menggunakan parser untuk memeriksa validitas json.
Untuk solusi masalah ini lihat di sini .
PS: Pertanyaan ini diajukan dan dijawab oleh saya.
sumber
dan kemudian panggil fungsi ini lewat JSON String Anda :)
sumber
Solusi di atas mencakup kedua skenario:
sumber
Solusi menggunakan
javax.json
perpustakaan:sumber
Anda dapat menggunakan
WellFormedJson
kelas dari pustaka validasi deklaratif Validol .Deklarasi itu sendiri dapat terlihat seperti berikut:
Fase pemeriksaan terlihat seperti itu:
Ini mungkin tampak seperti kerja keras untuk tugas sederhana seperti itu, tetapi bersinar ketika Anda harus memvalidasi permintaan yang kompleks. Lihat bagian mulai cepat validol .
sumber