LoginSignup
6
4

More than 5 years have passed since last update.

GroovyでJSONを簡単に処理する

Last updated at Posted at 2015-08-25

概要

WEB APIで条件をGET・POSTしたらJSONでリストが返ってくることって多いですよね。
そういう時に便利なのがGroovy
わずか数行で簡単に処理できます。

Doorkeeperで現時刻から24時間以内に開催されるイベントを検索してみます。
コードは次のようになります。

@Grab('org.codehaus.groovy.modules.http-builder:http-builder')
import groovyx.net.http.HTTPBuilder
import java.time.*

def http = new HTTPBuilder('http://api.doorkeeper.jp')

def since = OffsetDateTime.now()  //時差情報付き現在時刻(ISO8601)
def until = since.plusDays(1)

http.get(path:'/events', query:[since:since., until:until, locale:'ja']){
   res, json -> json.each{ println it.event.title }
   }
return

まずHTTP通信を簡単に行うためにHTTPBuilderを使用します。
Grapeで引っ張ってきてimportします。
検索する期間の文字列を生成するのですが、ISO8601形式なので簡単に処理するためにJava8のDate and Time APIを使いたいのでjava.time.*もimportします。

HTTPBuilderでGETするためにはgetメソッドを実行すればいいです。
第一引数はアクセス先をMapで指定します。第二引数はパラメータをMapで指定します。
レスポンスを処理するためのクロージャを書くことで受け取ったJSONを処理できます。
クロージャの第二引数がJSONオブジェクトでHTTPBuilderが良きに計らってくれているのでその後は楽です。
今回は各イベントのタイトルだけを抽出して表示させてみました。GroovyだとGetterやMapのKeyをフィールドのように扱えるので直感的でわかりやすいですよね。
このような感じで手軽にJSONを扱うことができます。

処理本体をワンライナーで書くと

@Grab('org.codehaus.groovy.modules.http-builder:http-builder')
import groovyx.net.http.HTTPBuilder
import java.time.*

new HTTPBuilder('http://api.doorkeeper.jp').get(path:'/events', query:[since:OffsetDateTime.now(), until:OffsetDateTime.now().plusDays(1), locale:'ja']){res,json -> json.each{ println it.event.title }}

こんなかんじになります。
何かおかしな点などありましたらご指摘お願いします。

参考

GroovyのHTTPBuilderを試す

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4