J'essaie de faire une simple application météo. J'utilise Ceci API pour cela. Sur cette même page est une liste de paramètres dans la réponse JSON. Je peux rechercher tous les paramètres et obtenir une réponse à l'exception du paramètre "météo". Chaque fois que j'essaie d'obtenir une erreur . Je ne suis pas sûr de ce qui cause. Voici mon code. P> URL url = new URL(urlString);
URLConnection conn = url.openConnection();
conn.connect();
JsonParser jp = new JsonParser();
JsonElement root = jp.parse(new InputStreamReader((InputStream) conn.getContent()));
JsonObject rootObj = root.getAsJsonObject();
String description = rootObj.get("weather").getAsString();
// name of the array in the json
System.out.println(description);
3 Réponses :
C'est le problème. Vous essayez d'analyser la propriété code> code> de la réponse en tant qu'objet (une carte) mais c'est réellement em> un tableau. P> mappe
Pouvez-vous me donner plus de conseils s'il vous plaît? J'essaie d'analyser comme un tableau mais je rencontre toutes sortes d'erreurs. En ce moment, j'obtiens une exception de pointeur nulle après avoir remplacé mon bloc d'essai avec le bloc de code dans mon édition. Si vous pouviez prendre un autre regard, cela vous aiderait beaucoup. Merci
La meilleure façon d'analyser le JSON Voici la bibliothèque GSON En premier lieu, vous pouvez créer une classe de pojo de réponse que vous obtenez, après cela, passez simplement la chaîne de réponse et obtenez votre sortie.
Gson gson=new Gson(); YourClass result=gson.fromjson(jsonString , YourClass.class);
Au lieu d'envisager aveuglément Hashmap pour des keyvalues, envisagez de créer des pojos, puis de l'analyser. Créez tout POJO pour JSON.
Main.java P>
import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class Sys { @SerializedName("type") @Expose private Integer type; @SerializedName("id") @Expose private Integer id; @SerializedName("message") @Expose private Double message; @SerializedName("country") @Expose private String country; @SerializedName("sunrise") @Expose private Integer sunrise; @SerializedName("sunset") @Expose private Integer sunset; public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Double getMessage() { return message; } public void setMessage(Double message) { this.message = message; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public Integer getSunrise() { return sunrise; } public void setSunrise(Integer sunrise) { this.sunrise = sunrise; } public Integer getSunset() { return sunset; } public void setSunset(Integer sunset) { this.sunset = sunset; } }
J'ai donc essayé d'utiliser cela mais aucun des getters ne fonctionne. Ils retournent tous null. Le seul qui fonctionne est le getter pour le nom de la ville et je suppose que c'est parce qu'il est défini dans le formulaire de recherche. À l'heure actuelle, je fais une chose JSONOBJECT, JSONARRAY, JSONARRAY pour choisir des éléments individuels de la chaîne de résultat JSON, mais il doit y avoir une meilleure façon de bien?
J'utilise la chaussure de printemps / thymelleaf si cela importe. Voici les contrôleurs / html Pastebin.com/dx26qtey Fondamentalement, aucun des getters ne fonctionne dans mes résultats.html. Le seul moyen de les faire fonctionner est depuis le convertisseur GSON de votre première classe ci-dessus. Mais je suis sûr que c'est faux sinon pourquoi quelqu'un passerait-il du temps à écrire ces getters?
J'ai posté une question ici Stackoverflow.com/Questtions/56488414/...
Voir Qu'est-ce qu'une trace de pile, et comment puis-je l'utiliser pour déboguer mes erreurs d'application? & Qu'est-ce qu'une exception Null Pointer, et comment puis-je le réparer?