私が使用している REST サービスから返されたこの JSON があります。
{
"id": "6804",
"signatories": [
{
"id": "12125",
"fields": [
{
"type": "standard",
"name": "fstname",
"value": "John"
},
{
"type": "standard",
"name": "sndname",
"value": "Doe"
},
{
"type": "standard",
"name": "email",
"value": "john.doe@somwhere.com"
},
{
"type": "standard",
"name": "sigco",
"value": "Company"
}
]
}
]
}
現在、これをjson4sで解析し、「フィールド」配列を反復して、そこにあるさまざまなオブジェクトのプロパティ「値」を変更できるようにする方法を検討しています。これまでのところ、いくつかのjsonライブラリを試してみましたが、最終的にはjson4sになりました。
Json4s を使用すると、json を解析して JObject にすることができます。この JObject から、"fields" 配列を抽出してみることができます。
import org.json4s._
import org.json4s.native.JsonMethods._
// parse to JObject
val data = parse(json)
// extract the fields into a map
val fields = data \ "signatories" \ "fields"
// parse back to JSON
println(compact(render(fields)))
このように Map を抽出し、再度 JSON にレンダリングしました。私が理解できないのは、これらのフィールドをループしてプロパティの「値」を変更する方法です。
私はjson4sのドキュメントを読みましたが、Scalaとその構文の両方に非常に慣れていないため、苦労しています。
問題は、解析された JSON の結果を反復処理して、プロパティの「値」を変更するにはどうすればよいかということです。
これが私が達成したい流れです。
- JSON を解析して反復可能なオブジェクトにする
- ループして特定の「名前」を探し、それらの値 (たとえば fstname) を John から別の名前に変更します。
- それを解析して JSON に戻すので、更新された値を含む新しい JSON を送り返すことができます。
これがこれを行うための最良の方法であるかどうかはわかりません。入力をいただければ幸いです。おそらくこれを行うより簡単な方法があります。
よろしくお願いします。
ステファン・コンノ