Bonjour à tous,
comme je ne suis pas habitué à poster sur developpez.net, je vous prie de m'excuser si le sujet n'est pas dans la bonne rubrique.
Je vais donc vous exposer mon problème: je suis actuellemnt en train de développer un programme d'interrogation de base de données dont les réponses me parviennent au format JSON, dont voici un extrait d'une réponse type:
{"emd":{"version":2,"currentTime":"2014-09-02T14:29:08Z","name":"item_prices","key":"buysell,typeID,regionID","columns":"buysell,typeID,regionID,price,updated","result":[{"row":{"buysell":"s","regionID":"10000002","typeID":"4399","price":21125715.613737,"updated":"2014-09-02 14:27:40"}},{"row":{"buysell":"s","regionID":"10000002","typeID":"4401","price":"0","updated":"2014-09-02 14:29:08"}},{"row":{"buysell":"s","regionID":"10000002","typeID":"26286","price":104999989.232,"updated":"2014-09-02 13:00:13"}},...}
J'effectue donc un parse de cette réponse comme suit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public static void questionURL(String sUrl) throws IOException {
URL url;
url = new URL(sUrl);
double dPrice = 0;
DecimalFormat df = new DecimalFormat("############.00");
InputStream is = url.openStream();
JsonReader rdr = Json.createReader(is);
JsonObject obj = rdr.readObject();
JsonObject results = obj.getJsonObject("emd");
//tableau dans JSON
JsonArray resultArray = results.getJsonArray("result");
for (JsonObject joData : resultArray.getValuesAs(JsonObject.class)) {
System.out.print("regionID : " + joData.getJsonObject("row").getString("regionID","!regionID") + " | ");
System.out.print("typeID : " + joData.getJsonObject("row").getString("typeID","!typeID") + " | ");
//Récupérer un double puis l'afficher formatté
dPrice = Double.valueOf(joData.getJsonObject("row").getJsonNumber("price").doubleValue());
System.out.println("price : " + df.format(dPrice));
System.out.println("-----------");
}
} |
Lorsque j'applique ce code au JSON ci-dessus, cela me donne:
1 2 3 4 5 6 7 8 9 10
| -----------
regionID : 10000002 | typeID : 4399 | price : 21125715,61
-----------
regionID : 10000002 | typeID : 4401 | Exception in thread "main" java.lang.ClassCastException: org.glassfish.json.JsonStringImpl cannot be cast to javax.json.JsonNumber
at org.glassfish.json.JsonObjectBuilderImpl$JsonObjectImpl.getJsonNumber(JsonObjectBuilderImpl.java:189)
at dataBaseExe.questionURL(dataBaseExe.java:153)
at dataBaseExe.createUrlQuery(dataBaseExe.java:124)
at Items.setAl(Items.java:34)
at Items.<init>(Items.java:12)
at priceViewer.main(priceViewer.java:47) |
Comme vous pouvez le constater le premier item est bien interprété. Néanmoins le second, correspondant au typeID 4401, dispose d'un prix égale à 0. Or ce dernier n'est apparemment pas bien parsé ou interprété de part sa valeur nulle.
Aussi, après de nombreuses tentatives, dont certaines implémentant des exceptions, je vous expose mon problème, en espérant trouver de l'aide.
Cordialement.
Partager