Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
速水 康晴
 速水 康晴(はやみ やすはる)
 1stネクスパイア株式会社 新潟オフィス
◦ プログラマ:Java/Flex/ActionScript
 日本Grails/Groovyユーザーグループ(JGGUG)
◦ サポート・スタッフ
 E-m...
 JSR353について
◦ 概要の説明
 Object Model API
◦ Groovyと組み合わせる例
2013/09/20 3
 Java API for JSON Processing (JSON-P)
◦ JavaでJSON処理を行う為のAPI
 http://json-processing-spec.java.net
 http://jcp.org/en/j...
APIは大きく分けて2つ
 Object Model API
◦ javax.json.JsonReader - 入力
◦ javax.json.JsonWriter - 出力
◦ javax.json.JsonBuilder – モデル構築...
JSON Object Model
 javax.json.JsonValue : JSONの値
◦ javax.json.JsonStructure : 構造を持つもの
 javax.json.JsonArray : JSON配列 - L...
JsonValue#getValueType()で種類を判定
 列挙型JsonValue.ValueTypeの値
◦ OBJECT: JSONオブジェクト
◦ ARRAY : JSON配列
◦ NUMBER : JSON数値
◦ STRING...
 GroovyはJSONを標準で処理できる
◦ groovy.json.*
◦ Groovyで処理した方がほとんどの場合楽
 JsonSlurperがkey-valueの登録順を覚えてくれない位
 相互変換して使ってみる
◦ JSON O...
 JSR353のリファレンス実装
@Grapes(
@Grab(group='org.glassfish', module='javax.json',
version='1.0.2')
)
2013/09/20 9
 JSON Object Model → Map, List
static toJavaObject(JsonValue value) {
switch (value.getValueType()) {
case ValueType.OBJE...
case ValueType.ARRAY:
def list = new ArrayList()
JsonArray array = (JsonArray) value
array?.each { JsonValue v -> list << ...
case ValueType.TRUE:
return Boolean.TRUE
case ValueType.FALSE:
return Boolean.FALSE
}
return null
}
2013/09/20 12
 今回のGroovyサンプル完全版
https://gist.github.com/toby55kij/6609800
2013/09/20 13
Prochain SlideShare
Chargement dans…5
×

JSR353をGroovyで賢く使う

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

  • Identifiez-vous pour voir les commentaires

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

×