私は適切な 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")
})
世界で最も最適なソリューションではありませんが、完全に読みやすく簡潔です。