Jackson comment transformer JsonNode en ArrayNode sans lancer?

Je change ma bibliothèque JSON d’org.json à Jackson et je souhaite migrer le code suivant:

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

Maintenant à Jackson, j’ai les éléments suivants:

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

Cependant, je n’aime pas le casting là-bas, y a-t-il la possibilité d’une ClassCastException ? Existe-t-il une méthode équivalente à getJSONArray dans org.json pour que je org.json gérer correctement les erreurs au cas où ce ne serait pas un tableau?

Oui, la conception de l’parsingur manuel Jackson est très différente de celle des autres bibliothèques. En particulier, vous remarquerez que JsonNode possède la plupart des fonctions que vous JsonNode généralement aux nœuds de tableau d’autres API. En tant que tel, vous n’avez pas besoin d’utiliser un ArrayNode pour l’utiliser. Voici un exemple:

JSON:

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

Code:

 final Ssortingng 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); } } 

Sortie:

“Un”
“Deux”
“Trois”

Notez l’utilisation de isArray pour vérifier que le noeud est en réalité un tableau avant l’itération. La vérification n’est pas nécessaire si vous avez absolument confiance dans la structure de vos données, mais si vous en avez besoin (et que cela n’est pas différent de la plupart des autres bibliothèques JSON).

Existe-t-il une méthode équivalente à getJSONArray dans org.json pour que je puisse gérer correctement les erreurs au cas où ce ne serait pas un tableau?

Cela dépend de votre consortingbution; c’est-à-dire les éléments que vous récupérez depuis l’URL. Si la valeur de l’atsortingbut “datasets” est un tableau associatif plutôt qu’un tableau simple, vous obtiendrez une ClassCastException .

Mais là encore, l’exactitude de votre ancienne version dépend également de l’entrée. Dans la situation où votre nouvelle version génère une ClassCastException , l’ancienne version lancera une JSONException . Référence: http://www.json.org/javadoc/org/json/JSONObject.html#getJSONArray(java.lang.Ssortingng)