Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JSR353をGroovyで賢く使う

1,680 views

Published on

JGGUGのG*ワークショップで発表したスライドです。

Published in: Technology
  • Login to see the comments

JSR353をGroovyで賢く使う

  1. 1. 速水 康晴
  2. 2.  速水 康晴(はやみ やすはる)  1stネクスパイア株式会社 新潟オフィス ◦ プログラマ:Java/Flex/ActionScript  日本Grails/Groovyユーザーグループ(JGGUG) ◦ サポート・スタッフ  E-mail:toby55kij@gmail.com  Twitter:toby55kij 22013/09/20
  3. 3.  JSR353について ◦ 概要の説明  Object Model API ◦ Groovyと組み合わせる例 2013/09/20 3
  4. 4.  Java API for JSON Processing (JSON-P) ◦ JavaでJSON処理を行う為のAPI  http://json-processing-spec.java.net  http://jcp.org/en/jsr/detail?id=353 ◦ JavaEE 7に含まれる  リファレンス実装:https://jsonp.java.net ◦ Expert Groupに日本人  元Twitter社の「イケメン」さん 2013/09/20 4
  5. 5. APIは大きく分けて2つ  Object Model API ◦ javax.json.JsonReader - 入力 ◦ javax.json.JsonWriter - 出力 ◦ javax.json.JsonBuilder – モデル構築  Streaming API ◦ javax.json.stream.JsonParser – 入力 ◦ javax.json.stream.JsonGenerator – 出力 javax.json.Jsonクラスが入り口 2013/09/20 5
  6. 6. JSON Object Model  javax.json.JsonValue : JSONの値 ◦ javax.json.JsonStructure : 構造を持つもの  javax.json.JsonArray : JSON配列 - List<JsonValue>  javax.json.JsonObject : JSONオブジェクト - Map<String, JsonValue> ◦ javax.json.JsonNumber : JSON数値 - BigDecimalで保持 ◦ javax.json.JsonString : JSON文字列 ◦ JsonValue.TRUE : true ◦ JsonValue.FALSE : false ◦ JsonValue.NULL : null 2013/09/20 6
  7. 7. JsonValue#getValueType()で種類を判定  列挙型JsonValue.ValueTypeの値 ◦ OBJECT: JSONオブジェクト ◦ ARRAY : JSON配列 ◦ NUMBER : JSON数値 ◦ STRING : JSON文字列 ◦ TRUE : true ◦ FALSE : false ◦ NULL : null 2013/09/20 7
  8. 8.  GroovyはJSONを標準で処理できる ◦ groovy.json.* ◦ Groovyで処理した方がほとんどの場合楽  JsonSlurperがkey-valueの登録順を覚えてくれない位  相互変換して使ってみる ◦ JSON Object Model → Map, List  今回はこちらを説明 ◦ JsonBuilder (Map, List, …) → JSON Object Model 2013/09/20 8
  9. 9.  JSR353のリファレンス実装 @Grapes( @Grab(group='org.glassfish', module='javax.json', version='1.0.2') ) 2013/09/20 9
  10. 10.  JSON Object Model → Map, List static toJavaObject(JsonValue value) { switch (value.getValueType()) { case ValueType.OBJECT: def map = new LinkedHashMap() JsonObject object = (JsonObject) value object?.each { String name, JsonValue v -> map[name] = toJavaObject(v) } return map 2013/09/20 10
  11. 11. case ValueType.ARRAY: def list = new ArrayList() JsonArray array = (JsonArray) value array?.each { JsonValue v -> list << toJavaObject(v) } return list case ValueType.STRING: JsonString st = (JsonString) value return st.string case ValueType.NUMBER: JsonNumber num = (JsonNumber) value return num.integral ? num.bigIntegerValueExact() : num.bigDecimalValue() 2013/09/20 11
  12. 12. case ValueType.TRUE: return Boolean.TRUE case ValueType.FALSE: return Boolean.FALSE } return null } 2013/09/20 12
  13. 13.  今回のGroovyサンプル完全版 https://gist.github.com/toby55kij/6609800 2013/09/20 13

×