Scala の JSON library

6
Kenji Yoshida @xuwei_k

自分もScalaでJson扱ってるので、Json処理の書きやすさはかなり重要な問題というか。dispatch.jsonあまり使ったことがないから調べるか / ダウンキャスト (id:NetPenguin / @NetPenguin) http://t.co/Lg9mUrXr

2011-10-02 02:22:09
kmizu @kmizu

これ、 .@eed3i9n さんによる翻訳記事の中でもしばらく前のもので、自分は何故か読んでなかったのだけど、語り口(とその翻訳の仕方)が面白すぎる http://t.co/WBXEB5pL #scalajp

2011-10-02 09:12:47
Kenji Yoshida @xuwei_k

@kmizu おーありがとうございます、こんなものも・・・。名前すら聞いたことなかったです。ちょっと見てみます

2011-10-02 09:23:51
∃ugene 🥙yokot∀ @eed3si9n_ja

.@kmizu 今なら lift-json が僕的にはデファクトスタンダードですね。

2011-10-02 09:24:23
Kenji Yoshida @xuwei_k

http://t.co/xfFlv3Si Scalazの2.8.0の5.0に依存・・・ェ・・・おぉぉぅ・・・

2011-10-02 09:25:28
Kenji Yoshida @xuwei_k

Lift-Json 仕事で使ってます(キリッ

2011-10-02 09:26:38
Kenji Yoshida @xuwei_k

「あるJsonのオブジェクトがある => その中からある一定の規則で値を取得、そもそも値がなければNoneで返す」 というような処理を、手続き型や、例外使ったコードで書く時点で、最近はそもそも負けな気がする。宣言的に関数型的に書きたい

2011-10-02 09:28:45
Kenji Yoshida @xuwei_k

自分でScala標準のJsonを2.9の casbah-dynamic のやつっぽくDynamic呼び出し可能にするなど、試しにつくってみたり http://t.co/Mt4iYULM などしているが、未だにScalaでのJsonの扱いが気に食わないというかなんというか

2011-10-02 09:30:59
Kenji Yoshida @xuwei_k

うまく言葉に表せないが、しかしLift-Jsonもイマイチ使いづらい部分があるんだがががががが

2011-10-02 09:32:54
Kenji Yoshida @xuwei_k

http://t.co/0LFS2jxF 「JValue型に対して、バックスラッシュのメソッド呼び出しした場合、JField型は返らないと思うんだが、matchの網羅的にそれを書かないと警告がでる」というLift Jsonにおける継承関係が気に入らない。自分の使い方がまずいのか

2011-10-02 09:36:44
Kenji Yoshida @xuwei_k

しかし、 @ee3si9n_ja さんがデファクトだというくらいだから、Lift Jsonは一番優れてるのか?UnfilteredとかもLift Jsonだったりとか、いろんなところでLift Json使われているし

2011-10-02 09:38:59
Kenji Yoshida @xuwei_k

"スイスからの攻撃を避けるため ># に変えなければいけなかった。" とか確かに面白いw http://t.co/hobYi7YK

2011-10-02 09:42:45
∃ugene 🥙yokot∀ @eed3si9n_ja

.@xuwei_k そこそこ使えるから、これに統一でもいいんじゃないっていうノリだと思います。dispatch-json の抽出子の使い方はパッと見、分かりづらいんで。

2011-10-02 09:43:56
Kenji Yoshida @xuwei_k

http://t.co/wHjj4bVk さっきみずしまさんに教えてもらったやつ、最後のコミットが「EitherからValidationに変えた」とかで、このまえ自分が疑問に感じたEitherとValidationの使いわけとかががが http://t.co/Z62XLe6W

2011-10-02 09:46:30
Kenji Yoshida @xuwei_k

「そこそこ使える」のはいいんだけど、Lift Jsonに、なにかしら改善できる欠点があるなら、時間がかかっても「理想的なJsonライブラリ」をみんなで追求するべきでーーーとか思うんだが

2011-10-02 09:49:50
∃ugene 🥙yokot∀ @eed3si9n_ja

.@xuwei_k lift-json に限らず、json のモヤモヤとした使いづらさってのは Scala がキッチリ型にハメないないと動いてくれないのに、json は JValue ですけど何か?って態度の違いが出てるのかも。

2011-10-02 09:52:08
Kenji Yoshida @xuwei_k

@eed3si9n_ja そうですね、とてもモヤモヤしますね。それがScalaというか静的型付けからくる限界とか欠点なのか。単に理想的なライブラリがないからこうなっているのかが知りたい。ついでにMongoDBなどやっているので、似たような自体がBSONでも起こっていて・・・

2011-10-02 09:54:23
Kenji Yoshida @xuwei_k

http://t.co/mTcLVPSe mzpさんのMessagePackの証明の話じゃないけれど、「Jsonからあるフィールドが存在すれば取得」というのは、Scalaであろうが、やろうと思えばもっとこうとても厳密に型安全にできる気がするんだがっていうモヤモヤ感

2011-10-02 09:56:59
Kenji Yoshida @xuwei_k

そういう「完璧に型安全なJsonライブラリ」が欲しい場合、自分で一からつくるしかないのか・・・

2011-10-02 09:59:25
∃ugene 🥙yokot∀ @eed3si9n_ja

.@xuwei_k 理想かどうかは分からないけど、僕的には scalaxb みたいなツールに json のデータをががーっと見せて、それが勝手にスキーマを推測して case class とそのパーサを生成っていう流れが好きかも

2011-10-02 09:59:35
Kenji Yoshida @xuwei_k

@eed3si9n_ja それもありなんですけど、その場合に「数値のマッピングはLongなのかIntなのかBigIntなのかDoubleなのか。Longに収まらない範囲が来た場合にどうするのか」っていう厳密に細かい制御したい場合などとても難しいなぁーとか

2011-10-02 10:02:27
Kenji Yoshida @xuwei_k

Lift JsonがBigIntなので、「実際の値がLongでそれ以外が入っていたらそもそもおかしい」という場合、毎回BigInt型にたいして、"toLong" メソッドを呼ぶとか微妙に非効率だし、気持ち悪くてしょうがない。数値のマッピング方法を事前に宣言的にしたい

2011-10-02 10:05:27
Kenji Yoshida @xuwei_k

とかまぁ「 #Scala でのJsonの処理」という、一見単純そうなことでも、「型安全かつ柔軟で使いやすい」を突き詰めていくと、いろいろ難しい

2011-10-02 10:07:02
Kenji Yoshida @xuwei_k

そこまで悩むんだったらいっそのことRubyなどの動的言語でJson処理したほうが、読みやすく綺麗にかけるよなーとか感じてしまうが、負けた気がしてぐぬぬぬぬ(´・ω・`)

2011-10-02 10:10:11