Bekerja dengan JSON di Groovy

1. Pengenalan

Dalam artikel ini, kami akan menerangkan dan melihat contoh bagaimana bekerjasama dengan JSON dalam aplikasi Groovy.

Pertama sekali, untuk mendapatkan contoh artikel ini dan berjalan, kita perlu menyediakan pom.xml kita :

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

Plugin Maven terbaru boleh didapati di sini dan versi terbaru dari groovy-all di sini.

2. Menghuraikan Objek Groovy ke JSON

Menukar Objek ke JSON di Groovy cukup mudah, andaikan kita mempunyai kelas Akaun :

class Account { String id BigDecimal value Date createdAt }

Untuk menukar contoh kelas itu ke JSON String, kita perlu menggunakan kelas JsonOutput dan membuat panggilan ke kaedah statik keJson ():

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 JSON String yang dihuraikan :

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

2.1. Menyesuaikan Output JSON

Seperti yang kita lihat, output tarikh tidak seperti yang kita mahukan. Untuk tujuan itu, bermula dengan versi 2.5, pakej groovy.json dilengkapi dengan set alat khusus.

Dengan kelas JsonGenerator , kita dapat menentukan pilihan untuk output JSON:

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

Hasilnya, kami akan mendapatkan JSON berformat tanpa medan nilai yang kami kecualikan dan dengan tarikh yang diformat:

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

2.2. Memformat Output JSON

Dengan kaedah di atas, kami melihat bahawa output JSON selalu berada dalam satu baris, dan boleh membingungkan jika objek yang lebih kompleks harus ditangani.

Walau bagaimanapun, kami dapat memformat output kami menggunakan kaedah prettyPrint :

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

Dan kami mendapat JSON yang diformat di bawah:

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

3. Menghuraikan JSON ke Objek Groovy

Kami akan menggunakan kelas Groovy JsonSlurper untuk menukar dari JSON ke Objek.

Juga, dengan JsonSlurper kami mempunyai banyak kaedah parse yang terlalu banyak dan beberapa kaedah khusus seperti parseText , parseFile, dan lain-lain.

Kami akan menggunakan parseText untuk menguraikan kelas String to a Account:

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

Dalam kod di atas, kami mempunyai kaedah yang menerima JSON String dan mengembalikan objek Akaun , yang boleh menjadi Objek Groovy.

Juga, kita dapat menguraikan JSON String to a Map, memanggilnya tanpa pemeran, dan dengan menaip dinamik Groovy, kita dapat memiliki objek yang sama.

3.1. Menghuraikan Input JSON

Pelaksanaan penghurai lalai untuk JsonSlurper adalah JsonParserType.CHAR_BUFFER , tetapi dalam beberapa kes, kita perlu menangani masalah penghuraian.

Mari kita lihat contoh untuk ini: diberi JSON String dengan sifat tarikh, JsonSlurper tidak akan membuat Objek dengan betul kerana ia akan cuba menguraikan tarikh sebagai String:

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

Akibatnya, kod di atas akan mengembalikan objek Akaun dengan semua sifat yang mengandungi nilai nol .

Untuk menyelesaikan masalah itu, kita boleh menggunakan JsonParserType.INDEX_OVERLAY.

Akibatnya, ia akan berusaha sekuat mungkin untuk mengelakkan penciptaan array String atau char char:

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

Sekarang, kod di atas akan mengembalikan contoh Akaun yang dibuat dengan betul.

3.2 Varian Parser

Juga, di dalam JsonParserType, kami mempunyai beberapa pelaksanaan lain:

  • JsonParserType.LAX akan membolehkan penguraian JSON yang lebih santai, dengan komen, tanpa rentetan petikan, dll.
  • JsonParserType.CHARACTER_SOURCE digunakan untuk penghuraian fail besar.

4. Kesimpulan

Kami telah merangkumi banyak pemprosesan JSON dalam aplikasi Groovy dengan beberapa contoh mudah.

Untuk maklumat lebih lanjut mengenai kelas pakej groovy.json, kita dapat melihat Dokumentasi Groovy.

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