Groovy-json

提供:Dev Guides
移動先:案内検索

Groovy-JSON

この章では、JSONオブジェクトの解析と生成にGroovy言語を使用する方法について説明します。

JSON関数

Sr.No Function & Libraries
1

JsonSlurper

JsonSlurperは、JSONテキストまたはリーダーコンテンツをGroovyデータに解析するクラスです

マップ、リスト、および整数、倍精度、ブール、ストリングなどのプリミティブ型などの構造。

2

JsonOutput

このメソッドは、GroovyオブジェクトをJSON文字列にシリアル化する役割を果たします。

JsonSlurperを使用したデータの解析

JsonSlurperは、JSONテキストまたはリーダーコンテンツをGroovyデータ構造(マップ、リスト、Integer、Double、Boolean、Stringなどのプリミティブ型)に解析するクラスです。

構文

def slurper = new JsonSlurper()

JSON slurperは、テキストまたはリーダーコンテンツをリストおよびマップのデータ構造に解析します。

JsonSlurperクラスには、パーサー実装用のバリアントがいくつか付属しています。 特定の文字列の解析に関しては、要件が異なる場合があります。 Webサーバーからの応答から返されたJSONを読み取る必要がある場合を考えてみましょう。 そのような場合、パーサーのJsonParserLaxバリアントを使用すると有益です。 このパーシーは、JSONテキスト内のコメントだけでなく、引用文字列なども許可します。 この種のパーサーを指定するには、JsonSlurperのオブジェクトを定義するときにJsonParserType.LAXパーサータイプを使用する必要があります。

以下の例を見てみましょう。 この例は、httpモジュールを使用してWebサーバーからJSONデータを取得するためのものです。 このタイプのトラバーサルの場合、最適なオプションはパーサータイプをJsonParserLaxバリアントに設定することです。

http.request( GET, TEXT ) {
   headers.Accept = 'application/json'
   headers.'User-Agent' = USER_AGENT

   response.success = {
      res, rd ->
      def jsonText = rd.text

     //Setting the parser type to JsonParserLax
      def parser = new JsonSlurper().setType(JsonParserType.LAX)
      def jsonResp = parser.parseText(jsonText)
   }
}

同様に、次の追加のパーサータイプがGroovyで利用可能です-

  • JsonParserCharArrayパーサーは基本的にJSON文字列を受け取り、基礎となる文字配列で動作します。 値の変換中に、文字のサブ配列(「チョッピング」として知られるメカニズム)をコピーし、個別に操作します。
  • JsonFastParserはJsonParserCharArrayの特別なバリアントであり、最速のパーサーです。 JsonFastParserは、インデックスオーバーレイパーサーとも呼ばれます。 指定されたJSON文字列の解析中に、新しいchar配列またはStringインスタンスの作成を回避するために、可能な限りの努力が行われます。 基になる元の文字配列のみへのポインタを保持します。 さらに、オブジェクトの作成を可能な限り遅らせます。
  • JsonParserUsingCharacterSourceは、非常に大きなファイル用の特別なパーサーです。 「文字ウィンドウ」と呼ばれる手法を使用して、一定のパフォーマンス特性を備えた大きなJSONファイル(この場合は2MBを超えるサイズのファイル)を解析します。

テキストの解析

JsonSlurperクラスを使用する方法の例を見てみましょう。

import groovy.json.JsonSlurper

class Example {
   static void main(String[] args) {
      def jsonSlurper = new JsonSlurper()
      def object = jsonSlurper.parseText('{ "name": "John", "ID" : "1"}')

      println(object.name);
      println(object.ID);
   }
}

上記の例では、私たちは-

  • 最初にJsonSlurperクラスのインスタンスを作成します
  • 次に、JsonSlurperクラスのparseText関数を使用して、JSONテキストを解析します。
  • オブジェクトを取得すると、キーを介してJSON文字列の値に実際にアクセスできることがわかります。

上記のプログラムの出力は以下のとおりです-

John
1

整数のリストの解析

JsonSlurperの解析方法の別の例を見てみましょう。 次の例では、整数のリストを解析しています。 次のコードから、それぞれのListメソッドを使用してクロージャーを渡すことができることに気付くでしょう。

import groovy.json.JsonSlurper
class Example {
   static void main(String[] args) {
      def jsonSlurper = new JsonSlurper()
      Object lst = jsonSlurper.parseText('{ "List": [2, 3, 4, 5] }')
      lst.each { println it }
   }
}

上記のプログラムの出力は以下のとおりです-

List=[2, 3, 4, 5]

プリミティブデータ型の解析リスト

JSONパーサーは、文字列、数値、オブジェクト、true、false、nullのプリミティブデータ型もサポートしています。 JsonSlurperクラスは、これらのJSONタイプを対応するGroovyタイプに変換します。

次の例は、JsonSlurperを使用してJSON文字列を解析する方法を示しています。 そしてここで、JsonSlurperが個々のアイテムをそれぞれのプリミティブ型に解析できることがわかります。

import groovy.json.JsonSlurper
class Example {

   static void main(String[] args) {
      def jsonSlurper = new JsonSlurper()
      def obj = jsonSlurper.parseText ''' {"Integer": 12, "fraction": 12.55, "double": 12e13}'''

      println(obj.Integer);
      println(obj.fraction);
      println(obj.double);
   }
}

上記のプログラムの出力は以下のとおりです-

12
12.55
1.2E+14

JsonOutput

次に、Jsonで出力を印刷する方法について説明します。 これは、JsonOutputメソッドによって実行できます。 このメソッドは、GroovyオブジェクトをJSON文字列にシリアル化する役割を果たします。

構文

Static string JsonOutput.toJson(datatype obj)

パラメータ-パラメータは、数値、ブール値、文字、文字列、日付、マップ、クロージャなどのデータ型のオブジェクトにすることができます。

戻り値のタイプ-戻り値のタイプはJSON文字列です。

以下は、これを実現する方法の簡単な例です。

import groovy.json.JsonOutput
class Example {
   static void main(String[] args) {
      def output = JsonOutput.toJson([name: 'John', ID: 1])
      println(output);
   }
}

上記のプログラムの出力は以下のとおりです-

{"name":"John","ID":1}

JsonOutputは、プレーンで古いgroovyオブジェクトにも使用できます。 次の例では、Student型のオブジェクトを実際にJsonOutputメソッドに渡していることがわかります。

import groovy.json.JsonOutput
class Example {
   static void main(String[] args) {
      def output = JsonOutput.toJson([ new Student(name: 'John',ID:1),
         new Student(name: 'Mark',ID:2)])
      println(output);
   }
}

class Student {
   String name
   int ID;
}

上記のプログラムの出力は以下のとおりです-

[{"name":"John","ID":1},{"name":"Mark","ID":2}]