意外にscala標準ライブラリのjsonライブラリの説明をしてくれているサイトが少ないので自分で試したことをまとめ。
ちなみに、簡単なJSONをパースするだけなら、標準ライブラリでいい気はするけど、
オブジェクトのJSON化したいなら、sjsonやgsonなどのライブラリを使用したほうがよさそうです。
JSONのパース
JSONのパースはscala.util.parsing.json.JSONクラスを使います。parseFullとparseRawの2つのメソッドがありますが、動作は同等です。パースしたJSONは以下のようなscalaのクラスにマップされます。
JSON type | JSON.parseFull | JSON.parseRaw |
JSON Map | Map[String,Any] | JSONObject |
JSON Array | List[Any] | JSONArray |
文字列 | String | String |
数値 | Double | Double |
コードではこのような感じになります。
import scala.util.parsing.json.JSON;
val json : Object[Any] = JSON.parseFull("""
{
"key1" : "string",
"key2" : 20,
"key3" : ["Array",1],
"key4" : {
"key5" : "hoge"
}
}
""")
/*
このようなオブジェクトが帰ります
json.get == Map(
"key1" -> "string",
"key2" -> 20.0,
"key3" -> List("Array",1.0),
"key4" -> Map( "key5" -> "hoge")
)
*/
数値がDoubleにマップされるのに注意してください。
また、jsonフォーマットが間違っている場合などは、戻り値がNoneとなります。
JSON化
JSON化にはJSONObject,JSONArrayを使います。
JSONObject(Map(
"key1" -> "string",
"key2" -> 20,
"key3" -> JSONArray(List("Array",1)),
"key4" -> JSONObject(Map( "key5" -> "hoge"))
)))
JSONObjectやJSONArrayで囲まないとだめなのが超イケてない。
0 件のコメント:
コメントを投稿