SlideShare a Scribd company logo
速水 康晴
!  速水 康晴(はやみ やすはる)
!  新潟県新潟市在住
!  ウイングアーク1st株式会社 新潟オフィス
◦  プログラマ:Java/Flex/ActionScript
!  JGGUGサポート・スタッフ
!  E-mail:toby55kij@gmail.com
!  Twitter:toby55kij	
2	
2014/06/20
!  GroovyでJSONを扱う
!  Groovy2.3での変更点
!  ライブラリ間の速度比較
2014/06/20	
 3
2014/6/13
↓
13日の金曜日
↓
JSON日の金曜日
(新潟市で行われているJSON勉強会飲み会)
↓
JSONの話
2014/06/20	
 4
!  バージョン1.8からサポート
◦  groovy.json.JsonBuilder
!  JSON作成用Builder
◦  groovy.json.StreamingJsonBuilder
!  Writerに書きこむJsonBuilder:1.8.1から
◦  groovy.json.JsonOutput
!  JSONとしてオブジェクトを文字列に出力	
◦  groovy.json.JsonSlurper
!  JSON文字列・ファイルの読み込み
2014/06/20	
 5
!  JsonBuilder:JSON文字列をDSLで構築
◦  Writerに直接書き込む:StreamingJsonBuilder
!  例:
def json = new groovy.json.JsonBuilder()
json {
person {
firstName 'Yasuharu'
lastName 'Hayami'
}
age 42
}
println json.toString()
2014/06/20	
 6
!  JsonOutput:オブジェクトを文字列に出力
◦  prettyPrint(String)で文字列を整形
!  例:

def obj = [person:

[firstName: 'Yasuharu', lastName: 'Hayami'],

age: 42]

File file = new File('output.json')

use(groovy.json.JsonOutput) {

file.text = obj.toJson().prettyPrint()

}
2014/06/20	
 7
!  JsonSlurper:JSON文字列を読み込む
◦  結果はJavaのListやMapに
!  例:
def slurper = new groovy.json.JsonSlurper()
def data = slurper.parseText '''{
"person": {
"firstName": "Yasuharu",
"lastName": "Hayami"
},
"age": 42
}'''
println "${groovy.json.JsonOutput.toJson data}"	
2014/06/20	
 8
!  JsonBuilderのリストでClosure指定が可能に
例:リスト内Songの値はtitleだけ出力したい
class Song { String title … }
def mySongs = [new Song (title: "Title 1", …),
new Song (title: "Title 2", …), …]
JsonBuilder json = new JsonBuilder()
def map = json {
//今まで
songs mySongs.collect { Song s ->
json { title s.title }
}
} 	
2014/06/20	
 9
!  JsonBuilderのリストでClosure指定が可能に
例:リスト内Songの値はtitleだけ出力したい
class Song { String title … }
def mySongs = [new Song (title: "Title 1", …),
new Song (title: "Title 2", …), …]
JsonBuilder json = new JsonBuilder()
def map = json {
//2.3から
songs mySongs, { Song s ->
title s.title
}
} 	
2014/06/20	
 10
!  JsonSlurper/JsonOutputのパフォーマンス改善
◦  BoonのJSON実装を基に
!  http://richardhightower.github.io/site/Boon/
◦  JsonSlurperは以前より最大21倍高速(リリースノート)
!  他のライブラリと比較して大雑把に2~4倍高速
◦  JsonOutputは以前より最大17倍高速(リリースノート)
!  他のライブラリと同程度の速度に
→本当か?!
2014/06/20	
 11
!  JsonSlurperで解析の種類を選択:type
◦  値はJsonParserType
!  CHARACTER_SOURCE:Readerで読みながら
!  大きいファイル(2MB以上)で使用	
!  CHAR_BUFFER:一旦文字列バッファ(char配列)に読み込む
!  デフォルト、数字・日付を「きちんと」解析したい場合に使用
!  LAX:値を文字列バッファへのポインタで持つ
!  コメントを含む場合に使用
!  長期的に値を持つ場合'Chop'か'Lazy Chop'を指定しておく
!  INDEX_OVERLAY:値を文字列バッファへのポインタで持つ
!  最速、2MB以下での使用がおすすめ
!  長期的に値を持つ場合'Chop'か'Lazy Chop'を指定しておく
2014/06/20	
 12
!  https://github.com/bura/json-benchmarks
◦  Groovy, Jackson, Gson, Boonの比較
◦  計測にはJMHを使用
!  ops/sを計測
!  データは4種類
◦  citys:単純な内容で29,470個のArray
◦  repos:複雑な内容で4個のArray
◦  user:複雑な内容のObject
◦  request:単純な内容のObject
2014/06/20	
 13
!  動作環境:MacBook Air, Core i7 1.7GHz, 8GB
◦  今使っているMac
◦  作業しつつ計測:値は参考程度に
!  なるべく最新のバージョンへ変更	
◦  Groovy:2.3.3と2.2.2
◦  Jackson:2.4.0
◦  Gson:2.2.4
◦  Boon:0.20
◦  JMH:0.9
→https://github.com/toby55kij/json-benchmarks
2014/06/20	
 14
!  Groovyと他のライブラリを比較
Groovy2.3.3を基準:値が大きいほど良い性能
◦  Deserialization(JsonSlurper)
!  Jackson:0.35~5.49
!  Gson:0.25~5.61
!  Boon:1.06~16.8
◦  Serialization(JsonOutput)
!  Jackson:0.90~1.33
!  Gson:0.40~0.81
!  Boon:1.55~100
→Jackson,Gsonより大抵の場合は高速
citysの性能が良くない
2014/06/20	
 15
!  Groovy2.2.2と2.3.3の比較
Groovy2.2.2を基準:値が大きいほど良い性能
◦  Deserialization(JsonSlurper)
!  Groovy2.3.3:1.41~39.97
◦  Serialization(JsonOutput)
!  Groovy2.3.3:12.6~27.9
→2.2より明らかに高速
2014/06/20	
 16
次の13日の金曜日は?
↓
2015/2/13
ご清聴ありがとうございました	
2014/06/20	
 17

More Related Content

What's hot

はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~
Ryunosuke SATO
 
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
Ryunosuke SATO
 
Crystal 勉強会 #5 in 渋谷 発表資料
Crystal 勉強会 #5 in 渋谷 発表資料Crystal 勉強会 #5 in 渋谷 発表資料
Crystal 勉強会 #5 in 渋谷 発表資料
at grandpa
 
サラリーマン
サラリーマンサラリーマン
サラリーマン
Koichiro Ohba
 
Crystalを触り始めてから起こったこと
Crystalを触り始めてから起こったことCrystalを触り始めてから起こったこと
Crystalを触り始めてから起こったこと
at grandpa
 
Rubyのバージョン(鳥取ruby会)
Rubyのバージョン(鳥取ruby会)Rubyのバージョン(鳥取ruby会)
Rubyのバージョン(鳥取ruby会)Kei Matsunaga
 
片手間JS on Rails
片手間JS on Rails片手間JS on Rails
片手間JS on Rails
Ryunosuke SATO
 
関西FirefoxOS勉強会 3rd GIG
関西FirefoxOS勉強会 3rd GIG関西FirefoxOS勉強会 3rd GIG
関西FirefoxOS勉強会 3rd GIGSatoru Sato
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションYoichiro Tanaka
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口
Sunao Tomita
 
Yapc2012ltthon
Yapc2012ltthonYapc2012ltthon
Yapc2012ltthon
Junya Murabe
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
Hiroyuki Ohnaka
 
twitewr
twitewrtwitewr
twitewrrinapik1
 
Ossで作るwebサイト
Ossで作るwebサイトOssで作るwebサイト
Ossで作るwebサイト
Soudai Sone
 
俺と自宅サーバコスパ
俺と自宅サーバコスパ俺と自宅サーバコスパ
俺と自宅サーバコスパ
Masayuki KaToH
 
JavaOne2016報告
JavaOne2016報告JavaOne2016報告
JavaOne2016報告
なおき きしだ
 
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 OsakaHokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
azumakuniyuki 🐈
 
VBScriptのダメなところ~その1~
VBScriptのダメなところ~その1~VBScriptのダメなところ~その1~
VBScriptのダメなところ~その1~bouzuya
 
まっちゃ139ー学生とITコミュ二ティの現在
まっちゃ139ー学生とITコミュ二ティの現在まっちゃ139ー学生とITコミュ二ティの現在
まっちゃ139ー学生とITコミュ二ティの現在
Shoot Morii
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
Hiroyuki Ohnaka
 

What's hot (20)

はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~
 
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
 
Crystal 勉強会 #5 in 渋谷 発表資料
Crystal 勉強会 #5 in 渋谷 発表資料Crystal 勉強会 #5 in 渋谷 発表資料
Crystal 勉強会 #5 in 渋谷 発表資料
 
サラリーマン
サラリーマンサラリーマン
サラリーマン
 
Crystalを触り始めてから起こったこと
Crystalを触り始めてから起こったことCrystalを触り始めてから起こったこと
Crystalを触り始めてから起こったこと
 
Rubyのバージョン(鳥取ruby会)
Rubyのバージョン(鳥取ruby会)Rubyのバージョン(鳥取ruby会)
Rubyのバージョン(鳥取ruby会)
 
片手間JS on Rails
片手間JS on Rails片手間JS on Rails
片手間JS on Rails
 
関西FirefoxOS勉強会 3rd GIG
関西FirefoxOS勉強会 3rd GIG関西FirefoxOS勉強会 3rd GIG
関西FirefoxOS勉強会 3rd GIG
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッション
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口
 
Yapc2012ltthon
Yapc2012ltthonYapc2012ltthon
Yapc2012ltthon
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
 
twitewr
twitewrtwitewr
twitewr
 
Ossで作るwebサイト
Ossで作るwebサイトOssで作るwebサイト
Ossで作るwebサイト
 
俺と自宅サーバコスパ
俺と自宅サーバコスパ俺と自宅サーバコスパ
俺と自宅サーバコスパ
 
JavaOne2016報告
JavaOne2016報告JavaOne2016報告
JavaOne2016報告
 
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 OsakaHokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
 
VBScriptのダメなところ~その1~
VBScriptのダメなところ~その1~VBScriptのダメなところ~その1~
VBScriptのダメなところ~その1~
 
まっちゃ139ー学生とITコミュ二ティの現在
まっちゃ139ー学生とITコミュ二ティの現在まっちゃ139ー学生とITコミュ二ティの現在
まっちゃ139ー学生とITコミュ二ティの現在
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
 

Viewers also liked

Groovy AST Demystified
Groovy AST DemystifiedGroovy AST Demystified
Groovy AST DemystifiedAndres Almiray
 
Griffon Update Gr8conf 2013
Griffon Update Gr8conf 2013Griffon Update Gr8conf 2013
Griffon Update Gr8conf 2013Andres Almiray
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
kyon mm
 
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
Uehara Junji
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
 
Grailsでシステム構築
Grailsでシステム構築Grailsでシステム構築
Grailsでシステム構築Megumi Sato
 
簡単!Groovy入門
簡単!Groovy入門簡単!Groovy入門
簡単!Groovy入門
Lee Choong Geun
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所
Takuma Watabiki
 
Xtext And Grails20091218
Xtext And Grails20091218Xtext And Grails20091218
Xtext And Grails20091218
Akira Tanaka
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
 
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料などRxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
Ryota Murohoshi
 

Viewers also liked (11)

Groovy AST Demystified
Groovy AST DemystifiedGroovy AST Demystified
Groovy AST Demystified
 
Griffon Update Gr8conf 2013
Griffon Update Gr8conf 2013Griffon Update Gr8conf 2013
Griffon Update Gr8conf 2013
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
 
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
Grailsでシステム構築
Grailsでシステム構築Grailsでシステム構築
Grailsでシステム構築
 
簡単!Groovy入門
簡単!Groovy入門簡単!Groovy入門
簡単!Groovy入門
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所
 
Xtext And Grails20091218
Xtext And Grails20091218Xtext And Grails20091218
Xtext And Grails20091218
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
 
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料などRxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
 

Similar to GroovyでJSON2014

Jggug20120901pojojson
Jggug20120901pojojsonJggug20120901pojojson
Jggug20120901pojojson
Yasuharu Hayami
 
Groovyでjson
GroovyでjsonGroovyでjson
Groovyでjson
Yasuharu Hayami
 
JSR353をGroovyで賢く使う
JSR353をGroovyで賢く使うJSR353をGroovyで賢く使う
JSR353をGroovyで賢く使う
Yasuharu Hayami
 
BACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSによるWebアプリケーション開発についてBACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSによるWebアプリケーション開発について
Toshio Ehara
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
Yukiya Nakagawa
 
Android 開発を加速するオープンソースライブラリ
Android 開発を加速するオープンソースライブラリAndroid 開発を加速するオープンソースライブラリ
Android 開発を加速するオープンソースライブラリ
健一 辰濱
 
GopherJS + Nashorn
GopherJS + NashornGopherJS + Nashorn
GopherJS + NashornTakuya Ueda
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
Kazuchika Sekiya
 
Java release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project AmberJava release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project Amber
Koichi Sakata
 

Similar to GroovyでJSON2014 (9)

Jggug20120901pojojson
Jggug20120901pojojsonJggug20120901pojojson
Jggug20120901pojojson
 
Groovyでjson
GroovyでjsonGroovyでjson
Groovyでjson
 
JSR353をGroovyで賢く使う
JSR353をGroovyで賢く使うJSR353をGroovyで賢く使う
JSR353をGroovyで賢く使う
 
BACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSによるWebアプリケーション開発についてBACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSによるWebアプリケーション開発について
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
 
Android 開発を加速するオープンソースライブラリ
Android 開発を加速するオープンソースライブラリAndroid 開発を加速するオープンソースライブラリ
Android 開発を加速するオープンソースライブラリ
 
GopherJS + Nashorn
GopherJS + NashornGopherJS + Nashorn
GopherJS + Nashorn
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
 
Java release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project AmberJava release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project Amber
 

More from Yasuharu Hayami

Jggug20141219 collect何とか
Jggug20141219 collect何とかJggug20141219 collect何とか
Jggug20141219 collect何とか
Yasuharu Hayami
 
jggug20120120
jggug20120120jggug20120120
jggug20120120
Yasuharu Hayami
 
JsonOutputについて
JsonOutputについてJsonOutputについて
JsonOutputについて
Yasuharu Hayami
 
Groovyの紹介20110820
Groovyの紹介20110820Groovyの紹介20110820
Groovyの紹介20110820
Yasuharu Hayami
 
Jggug20110617
Jggug20110617Jggug20110617
Jggug20110617
Yasuharu Hayami
 
Jggugcamp2010 LT
Jggugcamp2010 LTJggugcamp2010 LT
Jggugcamp2010 LT
Yasuharu Hayami
 
Jggug20100724
Jggug20100724Jggug20100724
Jggug20100724
Yasuharu Hayami
 

More from Yasuharu Hayami (8)

Jggug20141219 collect何とか
Jggug20141219 collect何とかJggug20141219 collect何とか
Jggug20141219 collect何とか
 
Groovyの紹介20130323
Groovyの紹介20130323Groovyの紹介20130323
Groovyの紹介20130323
 
jggug20120120
jggug20120120jggug20120120
jggug20120120
 
JsonOutputについて
JsonOutputについてJsonOutputについて
JsonOutputについて
 
Groovyの紹介20110820
Groovyの紹介20110820Groovyの紹介20110820
Groovyの紹介20110820
 
Jggug20110617
Jggug20110617Jggug20110617
Jggug20110617
 
Jggugcamp2010 LT
Jggugcamp2010 LTJggugcamp2010 LT
Jggugcamp2010 LT
 
Jggug20100724
Jggug20100724Jggug20100724
Jggug20100724
 

GroovyでJSON2014