みんなのオブザイヤーオブザイヤーを募集中!今年のツイート今年のうちにまとめよう!

Scala の JSON library

まとめました。
プログラミング SCALA
5398view 1コメント
6
Kenji Yoshida @xuwei_k
自分もScalaでJson扱ってるので、Json処理の書きやすさはかなり重要な問題というか。dispatch.jsonあまり使ったことがないから調べるか / ダウンキャスト (id:NetPenguin / @NetPenguin) http://t.co/Lg9mUrXr
水島宏太(Erlang勉強中) @kmizu
これ、 .@eed3i9n さんによる翻訳記事の中でもしばらく前のもので、自分は何故か読んでなかったのだけど、語り口(とその翻訳の仕方)が面白すぎる http://t.co/WBXEB5pL #scalajp
Kenji Yoshida @xuwei_k
@kmizu おーありがとうございます、こんなものも・・・。名前すら聞いたことなかったです。ちょっと見てみます
eugene yokota @eed3si9n_ja
.@kmizu 今なら lift-json が僕的にはデファクトスタンダードですね。
Kenji Yoshida @xuwei_k
http://t.co/xfFlv3Si Scalazの2.8.0の5.0に依存・・・ェ・・・おぉぉぅ・・・
Kenji Yoshida @xuwei_k
Lift-Json 仕事で使ってます(キリッ
Kenji Yoshida @xuwei_k
「あるJsonのオブジェクトがある => その中からある一定の規則で値を取得、そもそも値がなければNoneで返す」 というような処理を、手続き型や、例外使ったコードで書く時点で、最近はそもそも負けな気がする。宣言的に関数型的に書きたい
Kenji Yoshida @xuwei_k
自分でScala標準のJsonを2.9の casbah-dynamic のやつっぽくDynamic呼び出し可能にするなど、試しにつくってみたり http://t.co/Mt4iYULM などしているが、未だにScalaでのJsonの扱いが気に食わないというかなんというか
Kenji Yoshida @xuwei_k
うまく言葉に表せないが、しかしLift-Jsonもイマイチ使いづらい部分があるんだがががががが
Kenji Yoshida @xuwei_k
http://t.co/0LFS2jxF 「JValue型に対して、バックスラッシュのメソッド呼び出しした場合、JField型は返らないと思うんだが、matchの網羅的にそれを書かないと警告がでる」というLift Jsonにおける継承関係が気に入らない。自分の使い方がまずいのか
Kenji Yoshida @xuwei_k
しかし、 @ee3si9n_ja さんがデファクトだというくらいだから、Lift Jsonは一番優れてるのか?UnfilteredとかもLift Jsonだったりとか、いろんなところでLift Json使われているし
Kenji Yoshida @xuwei_k
"スイスからの攻撃を避けるため ># に変えなければいけなかった。" とか確かに面白いw http://t.co/hobYi7YK
eugene yokota @eed3si9n_ja
.@xuwei_k そこそこ使えるから、これに統一でもいいんじゃないっていうノリだと思います。dispatch-json の抽出子の使い方はパッと見、分かりづらいんで。
Kenji Yoshida @xuwei_k
http://t.co/wHjj4bVk さっきみずしまさんに教えてもらったやつ、最後のコミットが「EitherからValidationに変えた」とかで、このまえ自分が疑問に感じたEitherとValidationの使いわけとかががが http://t.co/Z62XLe6W
Kenji Yoshida @xuwei_k
「そこそこ使える」のはいいんだけど、Lift Jsonに、なにかしら改善できる欠点があるなら、時間がかかっても「理想的なJsonライブラリ」をみんなで追求するべきでーーーとか思うんだが
eugene yokota @eed3si9n_ja
.@xuwei_k lift-json に限らず、json のモヤモヤとした使いづらさってのは Scala がキッチリ型にハメないないと動いてくれないのに、json は JValue ですけど何か?って態度の違いが出てるのかも。
Kenji Yoshida @xuwei_k
@eed3si9n_ja そうですね、とてもモヤモヤしますね。それがScalaというか静的型付けからくる限界とか欠点なのか。単に理想的なライブラリがないからこうなっているのかが知りたい。ついでにMongoDBなどやっているので、似たような自体がBSONでも起こっていて・・・
Kenji Yoshida @xuwei_k
http://t.co/mTcLVPSe mzpさんのMessagePackの証明の話じゃないけれど、「Jsonからあるフィールドが存在すれば取得」というのは、Scalaであろうが、やろうと思えばもっとこうとても厳密に型安全にできる気がするんだがっていうモヤモヤ感
Kenji Yoshida @xuwei_k
そういう「完璧に型安全なJsonライブラリ」が欲しい場合、自分で一からつくるしかないのか・・・
eugene yokota @eed3si9n_ja
.@xuwei_k 理想かどうかは分からないけど、僕的には scalaxb みたいなツールに json のデータをががーっと見せて、それが勝手にスキーマを推測して case class とそのパーサを生成っていう流れが好きかも
Kenji Yoshida @xuwei_k
@eed3si9n_ja それもありなんですけど、その場合に「数値のマッピングはLongなのかIntなのかBigIntなのかDoubleなのか。Longに収まらない範囲が来た場合にどうするのか」っていう厳密に細かい制御したい場合などとても難しいなぁーとか
Kenji Yoshida @xuwei_k
Lift JsonがBigIntなので、「実際の値がLongでそれ以外が入っていたらそもそもおかしい」という場合、毎回BigInt型にたいして、"toLong" メソッドを呼ぶとか微妙に非効率だし、気持ち悪くてしょうがない。数値のマッピング方法を事前に宣言的にしたい
Kenji Yoshida @xuwei_k
とかまぁ「 #Scala でのJsonの処理」という、一見単純そうなことでも、「型安全かつ柔軟で使いやすい」を突き詰めていくと、いろいろ難しい
Kenji Yoshida @xuwei_k
そこまで悩むんだったらいっそのことRubyなどの動的言語でJson処理したほうが、読みやすく綺麗にかけるよなーとか感じてしまうが、負けた気がしてぐぬぬぬぬ(´・ω・`)
残りを読む(37)

コメント

Kenji Yoshida @xuwei_k 2011-12-02 02:24:16
http://togetter.com/li/217811 続編|ω・`)? ではないけれど、海外Scalaistが話していたのを勝手にまとめたので参考にどーぞ
ログインして広告を非表示にする
ログインして広告を非表示にする