0
votes

Avoir du mal à obtenir un paramètre spécifique de la réponse de l'API

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 xxx pré>

. 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 :


0
votes

mappe cloudsmap = jsontomap (respmap.get ("temps"). Tostring ());

C'est le problème. Vous essayez d'analyser la propriété de la réponse en tant qu'objet (une carte) mais c'est réellement un tableau.


1 commentaires

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



0
votes

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);


0 commentaires

0
votes

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;
}

}


3 commentaires

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/...