140

JSON ライブラリを org.json から Jackson に変更しており、次のコードを移行したいと考えています。

JSONObject datasets = readJSON(new URL(DATASETS));
JSONArray datasetArray =  datasets.getJSONArray("datasets");

現在、ジャクソンには次のものがあります。

ObjectMapper m = new ObjectMapper();
JsonNode datasets = m.readTree(new URL(DATASETS));      
ArrayNode datasetArray = (ArrayNode)datasets.get("datasets");

しかし、私はそこのキャストが好きではありません。可能性はありClassCastExceptionますか? 配列でない場合に適切なエラー処理ができるようにgetJSONArray、 inと同等のメソッドはありますか?org.json

4

5 に答える 5

282

はい、Jackson のマニュアル パーサーの設計は、他のライブラリとはかなり異なります。JsonNode特に、通常は他の API の配列ノードに関連付けるほとんどの関数が含まれていることに気付くでしょう。そのため、使用するためにキャストする必要はありませんArrayNode。次に例を示します。

JSON:

{
    "objects" : ["One", "Two", "Three"]
}

コード:

final String json = "{\"objects\" : [\"One\", \"Two\", \"Three\"]}";

final JsonNode arrNode = new ObjectMapper().readTree(json).get("objects");
if (arrNode.isArray()) {
    for (final JsonNode objNode : arrNode) {
        System.out.println(objNode);
    }
}

出力:

「一」
「二」
「三」

isArrayを使用して、反復する前にノードが実際に配列であることを確認することに注意してください。データ構造に完全に自信がある場合はチェックは必要ありませんが、必要に応じて利用できます (これは他のほとんどの JSON ライブラリと同じです)。

于 2013-05-28T13:18:39.123 に答える