データ内のすべての&、 "、'、<、>文字を&amp;、&quot;などに変換するJSON Web APIを使用しています。PHPのhtmlspecialchars()を使用しているようです。
私はこれを処理するいくつかの実用的なPHPコードを持っています:
function unescape_special_chars(&$value, $key) {
$value = html_entity_decode($value, ENT_QUOTES, 'UTF-8');
}
...
$response = json_decode($response->getBody(), true);
// the data has been run through htmlspecialchars(), we must undo this
array_walk_recursive($response, 'unescape_special_chars');
これは素晴らしいことです。返されたJSONオブジェクトの構造が何であるかはわかりませんが、上記はそれをウォークアップしてすべて修正します。
このコードをJavaに書き直す必要があり、Playを使用しています。フレームワーク。私はPlayにかなり慣れておらず、Javaではさびています。Playアプリ内のutilクラスでこれまでに持っているものは次のとおりです。
protected Promise<JsonNode> consumeApi() throws Exception {
Promise<Response> resultsP = WS.url(REST_URL).post("");
Promise<JsonNode> jsonNodeP = resultsP.map(new Function<Response, JsonNode>() {
public JsonNode apply(Response response) throws Throwable {
// Here I need to "array_walk_recursive" in Java/Jackson
return response.asJson();
}
});
return jsonNodeP;
}
JavaやJacksonで同様のことを行うにはどうすればよいですか?JsonNodeによって提供されるツリーモデルをトラバースできるはずだと感じていますが、いくつかの提案やポインターを正しい方向に使用することができました。ありがとう。