2

変更できない内部 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
          )
        }
      )
    }
}
4

1 に答える 1