25

ドキュメントとソース コードを調べても、これを行う明確な方法がわかりません。私が何かを見逃しているかどうか興味があります。

サーバーの応答から InputStream を受け取ったとします。この InputStream から JsonParser を作成します。サーバーの応答は、次のような有効な JSON を含むテキストであることが期待されます。

{"iamValidJson":"yay"}

ただし、応答が無効な JSON になるか、JSON ではない場合は次のようになります。

Some text that is not JSON

JsonParser は最終的に例外をスローします。この場合、基になる無効なテキスト " Some text that is not JSON" を JsonParser から抽出して、別の目的に使用できるようにしたいと考えています。

リセットをサポートしておらず、JsonParser の作成で消費されるため、InputStream から引き出すことはできません。

これを行う方法はありますか?

4

5 に答える 5

23

をお持ちの場合は、JsonParser使用できますjsonParser.readValueAsTree().toString()

ただし、これには、解析される JSON が実際に有効な JSON であることが必要になる可能性があります。

于 2013-05-30T00:11:46.507 に答える
2

あなたがやろうとしていることは、ジャクソンの範囲外です(そして、他のすべてのJava JSONライブラリではないにしても、ほとんど)。やりたいことは、入力ストリームを文字列に完全に消費し、Jackson を使用してその文字列を JSON オブジェクトに変換しようとすることです。変換が失敗した場合は、中間文字列で何かを行い、それ以外の場合は通常どおり続行します。利便性のために優れたApache Commons IO ライブラリを利用する例を次に示します。

final InputStream stream ; // Your stream here

final String json = IOUtils.toString(stream);
try {
    final JsonNode node = new ObjectMapper().readTree(json);
    // Do something with JSON object here
} catch(final JsonProcessingException jpe) {
    // Do something with intermediate string here
}
于 2013-05-31T05:37:53.003 に答える