変更できない内部 Web サービスからインターネット クライアントへのネットワーク トラフィックを削減するために、JSON 応答を削減したいと考えています。
つまり、JSON 応答の特定のサブセットのみを抽出する Web サービス「リレー」です。
発生しているのは JSON をあるフォーマットから別のフォーマットに変換することだけなので、Play Framework 2.1 で新しい JSON Transformers を使用することをお勧めします ( http://www.playframework.com/documentation/2.1.1/ScalaJsonTransformersを参照) 。
難しさを増すために、応答は異なる JSON オブジェクトの配列であり、各オブジェクトから必要なフィールドは 2 つだけです。
具体的なダミーの例として、次の JSON を変換しようとしています。
[
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ],
"keyC": "drop this value"
},
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ],
"keyD": "drop this value",
"keyE": "drop this value"
},
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ],
"extraRandomKeys": "drop this value",
"fieldsWhichMayNotAlwaysAppear: "drop this value"
}
]
の中へ:
[
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ]
},
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ]
},
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ]
}
]
私が使用したテンプレートメソッドは次のとおりです。
def relayWsResponse = Action {
request =>
Async {
WS.url("http://internalhost/service")
.get()
.map(
response => {
Ok(
response.json.transform(
???
).get
)
}
)
}
}