私は適切な Scala JSON ライブラリを選択しようとしていますが、lift-json
現時点ではそれが最良の選択であるというコンセンサスが得られているようです。
呪文のためにそれ (バージョン 2.5.1) を試した後、私が必要としていたことのほとんどをかなり簡単に行うことができましたJValue
。
の次のインスタンスがあるとしますJValue
。
val john = ("id" -> 1) ~
("name" -> "Foo") ~
("nested" ->
("id" -> 2) ~
("name" -> "Bar"))
Foo
親要素の名前を からに変更したいのですがfoo
。私はtransform
方法が行く方法だと思った:
john transform {
case JField("name", _) => JField("name", "foo")
})
しかし、これにより、親要素とネストされた要素の両方のname
フィールドが変更されfoo
ます。振り返ってみると、これは驚くべきことではありませんでした。
ドキュメントとコードを確認しましたが、 のキーを持つ特定のフィールドを選択する方法が見つかりませんでしたname
。私は何か見落としてますか?
もう1つの解決策(そしてこれが機能する)は、2つのJValue
オブジェクトをマージしているようですが、少し冗長に見えます:
john merge JObject(JField("name", "foo") :: Nil)
同じ結果を達成する組み込みの読みやすい方法はありますか? JField
からへの暗黙的な変換を書くこともできるかもしれませんが、そのようなメカニズムがまだないのはJObject
奇妙に思えます。lift-json
もし私が賭けなければならないとしたら、それはそれが存在しないというよりも、私がそれを見つけられなかったことにあるでしょう。
編集:私は今少しばかげていると感じます
john transform {
case JField("name", "Foo") => JField("name", "foo")
})
世界で最も最適なソリューションではありませんが、完全に読みやすく簡潔です。