1.はじめに

この記事では、

Groovy

アプリケーションでJSONを操作する方法の例を説明し、例を見ていきます。

まず、この記事の例を実行するには、

pom.xml

を設定する必要があります。

<build>
    <plugins>
       //...
        <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <version>1.6</version>
        </plugin>
    </plugins>
</build>
<dependencies>
   //...
    <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-all</artifactId>
        <version>2.4.13</version>
    </dependency>
</dependencies>

最新のMavenプラグインはhttps://mvnrepository.com/artifact/org.codehaus.gmavenplus/gmavenplus-plugin[ここ]および最新バージョンの

groovy-all


https://mvnrepository.com/artifact/orgにあります。

.codehaus.groovy/groovy-all[ここ]。

2. GroovyオブジェクトをJSONにパースする

GroovyでオブジェクトをJSONに変換するのはとても簡単です、

Account

クラスがあるとしましょう:

class Account {
    String id
    BigDecimal value
    Date createdAt
}

そのクラスのインスタンスをJSONの

Stringに変換するには、

JsonOutput

クラスを使用して静的メソッド

toJson()を呼び出す必要があります。

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

その結果、解析されたJSON __Stringが取得されます。

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

2.1. JSON出力のカスタマイズ

ご覧のとおり、日付の出力は希望どおりではありません。そのために、バージョン2.5以降、パッケージ

groovy.json

には専用のツールセットが付属しています。


JsonGenerator

クラスを使用して、JSON出力に対するオプションを定義できます。

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

println generator.toJson(account)

その結果、除外したvalueフィールドとフォーマットされた日付なしのフォーマットされたJSONが得られます。

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

2.2. JSON出力のフォーマット

上記の方法で、JSON出力は常に単一行になっていることがわかりました。さらに複雑なオブジェクトを処理する必要がある場合は、混乱することがあります。

ただし、

prettyPrint

メソッドを使用して出力をフォーマットできます。

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

そして、フォーマットされたJSONは以下のようになります。

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

3. GroovyオブジェクトへのJSONの解析

Groovyのクラス

JsonSlurper

を使ってJSONから

Objects.

に変換します

また、

JsonSlurper

では、たくさんのオーバーロードされた

parse

メソッドと、

parseText



parseFile、

などの特定のメソッドがいくつかあります。


String



Accountクラスに解析するには、

parseText__を使用します。

def jsonSlurper = new JsonSlurper()

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

上記のコードでは、JSONの

String

を受け取り、

Account

オブジェクトを返すメソッドがあります。これは任意のGroovyオブジェクトです。

また、JSONの

String

を__Mapに解析し、キャストなしで呼び出すこともできます。Groovyの動的型付けでは、オブジェクトと同じにすることができます。

3.1. JSON入力の解析


JsonSlurper

のデフォルトのパーサー実装は

JsonParserType.CHAR

BUFFER__ですが、場合によっては、解析上の問題に対処する必要があります。

例を見てみましょう。dateプロパティを持つJSON

String

を指定すると、

JsonSlurper

はDateを

String:

として解析しようとするため、Objectを正しく作成できません。

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

結果として、上記のコードは

Null

値を含むすべてのプロパティを持つ

Account

オブジェクトを返します。

この問題を解決するために、

JsonParserType.INDEX

OVERLAY.__を使用できます。

結果として、

String

やchar配列の作成を避けるために、可能な限り努力します。

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

さて、上記のコードは適切に作成された

Account

インスタンスを返します。

3.2パーサバリアント

また、__JsonParserTypeの内部には、他にもいくつかの実装があります。


  • JsonParserType.LAX

    は、よりリラックスしたJSON解析を可能にします。

コメント、引用符なしなど


  • JsonParserType.CHARACTER

    SOURCE__は、ラージファイル解析に使用されます。

4.まとめ

GroovyアプリケーションでのJSON処理の多くを簡単な例で説明しました。


groovy.json

パッケージクラスの詳細については、http://groovy-lang.org/json.html[Groovyのドキュメント]を参照してください。


GitHubレポジトリ

で、この記事で使用されているクラスのソースコードと単体テストを確認してください。