Bekerja dengan JSON di Groovy

1. Perkenalan

Pada artikel ini, kami akan menjelaskan dan melihat contoh cara bekerja dengan JSON di aplikasi Groovy.

Pertama-tama, untuk mendapatkan contoh artikel ini dan berjalan, kita perlu menyiapkan pom.xml kita :

  // ...  org.codehaus.gmavenplus gmavenplus-plugin 1.6     // ...  org.codehaus.groovy groovy-all 2.4.13  

Plugin Maven terbaru dapat ditemukan di sini dan versi terbaru dari semua groovy di sini.

2. Parsing Objek Groovy ke JSON

Mengonversi Objek ke JSON di Groovy cukup sederhana, anggap saja kita memiliki kelas Akun :

class Account { String id BigDecimal value Date createdAt }

Untuk mengonversi instance dari kelas itu menjadi String JSON , kita perlu menggunakan kelas JsonOutput dan membuat panggilan ke metode statis toJson ():

Account account = new Account( id: '123', value: 15.6, createdAt: new SimpleDateFormat('MM/dd/yyyy').parse('01/01/2018') ) println JsonOutput.toJson(account)

Hasilnya, kita akan mendapatkan String JSON yang diurai :

{"value":15.6,"createdAt":"2018-01-01T02:00:00+0000","id":"123"}

2.1. Menyesuaikan Output JSON

Seperti yang bisa kita lihat, keluaran tanggal bukanlah yang kita inginkan. Untuk tujuan itu, dimulai dengan versi 2.5, paket groovy.json hadir dengan seperangkat alat khusus.

Dengan kelas JsonGenerator , kita dapat menentukan opsi untuk keluaran JSON:

JsonGenerator generator = new JsonGenerator.Options() .dateFormat('MM/dd/yyyy') .excludeFieldsByName('value') .build() println generator.toJson(account)

Hasilnya, kita akan mendapatkan JSON yang diformat tanpa kolom nilai yang kita kecualikan dan dengan tanggal yang diformat:

{"createdAt":"01/01/2018","id":"123"}

2.2. Memformat Output JSON

Dengan metode di atas, kami melihat bahwa keluaran JSON selalu dalam satu baris, dan dapat membingungkan jika objek yang lebih kompleks harus ditangani.

Namun, kami dapat memformat keluaran kami menggunakan metode prettyPrint :

String json = generator.toJson(account) println JsonOutput.prettyPrint(json)

Dan kami mendapatkan JSON yang diformat di bawah ini:

{ "value": 15.6, "createdAt": "01/01/2018", "id": "123" }

3. Parsing JSON ke Objek Groovy

Kita akan menggunakan kelas Groovy JsonSlurper untuk mengonversi dari JSON ke Objek.

Selain itu, dengan JsonSlurper kami memiliki banyak metode parse yang kelebihan beban dan beberapa metode khusus seperti parseText , parseFile, dan lainnya.

Kami akan menggunakan parseText untuk mengurai String ke kelas Akun:

def jsonSlurper = new JsonSlurper() def account = jsonSlurper.parseText('{"id":"123", "value":15.6 }') as Account

Dalam kode di atas, kami memiliki metode yang menerima JSON String dan mengembalikan objek Akun , yang dapat berupa Objek Groovy apa pun.

Juga, kita dapat mengurai String JSON ke Peta, memanggilnya tanpa cast, dan dengan pengetikan dinamis Groovy, kita dapat memiliki objek yang sama.

3.1. Mengurai Input JSON

Implementasi parser default untuk JsonSlurper adalah JsonParserType.CHAR_BUFFER , tetapi dalam beberapa kasus, kita perlu menangani masalah penguraian.

Mari kita lihat contoh untuk ini: dengan JSON String dengan properti tanggal, JsonSlurper tidak akan membuat Objek dengan benar karena akan mencoba mengurai tanggal sebagai String:

def jsonSlurper = new JsonSlurper() def account = jsonSlurper.parseText('{"id":"123","createdAt":"2018-01-01T02:00:00+0000"}') as Account

Hasilnya, kode di atas akan mengembalikan objek Akun dengan semua properti yang berisi nilai null .

Untuk mengatasi masalah tersebut, kita dapat menggunakan JsonParserType.INDEX_OVERLAY.

Akibatnya, ia akan berusaha sekuat mungkin untuk menghindari pembuatan String atau array karakter:

def jsonSlurper = new JsonSlurper(type: JsonParserType.INDEX_OVERLAY) def account = jsonSlurper.parseText('{"id":"123","createdAt":"2018-01-01T02:00:00+0000"}') as Account

Sekarang, kode di atas akan mengembalikan instance Akun yang dibuat dengan tepat.

3.2 Varian Parser

Selain itu, di dalam JsonParserType, kami memiliki beberapa implementasi lain:

  • JsonParserType.LAX akan memungkinkan penguraian JSON yang lebih santai, dengan komentar, tanpa string kutipan, dll.
  • JsonParserType.CHARACTER_SOURCE digunakan untuk penguraian file besar.

4. Kesimpulan

Kami telah membahas banyak pemrosesan JSON dalam aplikasi Groovy dengan beberapa contoh sederhana.

Untuk informasi lebih lanjut tentang kelas paket groovy.json kita dapat melihat Dokumentasi Groovy.

Periksa kode sumber kelas yang digunakan dalam artikel ini, serta beberapa pengujian unit, di repositori GitHub kami.