J'ai ce code json
private void getJson() {
URL obj = null;
try {
obj = new URL("https://gekon.technologypark.cz/api/v1/notification/");
HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("ApiSecret", LoginInfo.ApiSecret);
conn.connect();
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
StringBuilder sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null)
sb.append(output);
JSONObject jsonObj = new JSONObject(sb.toString());
Log.d("test", "response" + jsonObj);
JSONObject dataObj =new JSONObject("data");
JSONObject dataObj19 =dataObj.getJSONObject("22");
String body1 =dataObj19.getString("body");
Log.d("test", "TEST ID" + body1);
pushNotification(notifText);
} catch (Exception e) {
e.printStackTrace();
Log.d("test", "PUSH CATCH" + e);
}
}
}
Et je veux prendre les valeurs de "body" (test, test1) .
Comment puis-je les atteindre? J'ai laissé le code que j'ai essayé juste pour le voir avec // ne fonctionne pas à côté. Des idées s'il vous plaît? De plus, les 19,20 ne sont pas les mêmes, donc je suis impossible de les obtenir en mettant simplement le nom d'une variable (ex JSONObject dataObj = new JSONObject (" data ");
Voici mon code
{
"status": "success",
"message": null,
"data": {
"19": {
"id": "19",
"created": "2019-01-07 13:26:06",
"createdby": 158,
"touched": "2019-01-07 13:26:06",
"touchedby": 158,
"start": "2019-01-07",
"end": "2019-01-08",
"scoperole": 3,
"scopecorp": 1,
"body": "<p>test</p>",
"language": "en"
},
"20": {
"id": "20",
"created": "2019-01-07 13:26:20",
"createdby": 158,
"touched": "2019-01-07 13:26:20",
"touchedby": 158,
"start": "2019-01-07",
"end": "2019-01-08",
"scoperole": 3,
"scopecorp": 1,
"body": "<p>test1</p>",
"language": "en"
}
},
"error": 0,
"line": 1515,
"debug": null
Voici mes logs
** 2019-01-07 14: 17: 42.778 19712-19712 / ibm.gekon.vasileiosvlachakis.gekon D / alekos: response {"status": "success", "message": null, "data": {"22": {"id": "22", "created": "2019-01-07 14:11:55 "," createdby ": 158," touched ":" 2019-01-07 14:11:55 "," touchedby ": 158," start ":" 2019-01-07 "," end ":" 2019-01-08 "," scoperole ": 3," scopecorp ": 1," body ":"
test22
"," language ":" fr "}}," error ": 0," line ": 1515," debug ": null}2019-01-07 14: 17: 42.785 19712-19712 / ibm.gekon.vasileiosvlachakis.gekon D / alekos: PUSH CATCHorg.json.JSONException: Données de valeur de type java.lang.String ne peut pas être converti en JSONObject **
4 Réponses :
Dans une réponse JSON, votre clé doit toujours être statique afin d'obtenir une réponse particulière de la clé.
Ici, vérifiez si vos données
JSONObjectcontiennent cette clé ou non pour la gestion des erreurs.
try {
JSONObject jsonObj = new JSONObject(sb.toString());// assuming this as your main JSONObject
if(jsonObj.has("data")){
JSONObject dataObj =jsonObj.getJSONObject("data");
if(dataObj.has("19")){
JSONObject json19 = dataObj.getJSONObject("19");
// Now here check if the json19 contains the key that you want.
if(json19.has("body")){
String valueBody = json19.getString("body"); // this will give you the value of body
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
Ici, vous pouvez obtenir la valeur de la clé du corps. mais ceci est spécifique pour les objets JSON 19 et 20
JSONObject dataObj =new JSONObject("data");
for(int i=0;i<dataObj.length();i++){
JSONObject data =dataObj.getJSONObject(i);
String body =data .getString("body");
}
si Response a plusieurs objets JSON à l'intérieur de données JSON objet alors vous avez besoin d'une boucle pour le récupérer
JSONObject dataObj = new
JSONObject(sb.toString()).getJSONObject("data");
JSONObject dataObj19 =dataObj.getJSONObject("19");
String body1 =dataObj19.getString("body");
JSONObject dataObj20 =dataObj.getJSONObject("20");
String body2 =dataObj20.getString("body");
J'ai essayé votre première réponse et cela me donne cette org.json.JSONException: les données de valeur de type java.lang.String ne peuvent pas être converties en JSONObject
@AlexKolydas met à jour votre code après l'ajout. Je pense que vous vous trompez ailleurs.
@AlexKolydas vous n'obtenez pas l'objet data car vous ne l'analisez pas via la réponse.
JSONObject json = new JSONObject(sb.toString());
String statistics = json.getString("data");
for(Iteraor key=json.keys();key.hasNext();) {
JSONObject keyValue = json.get(key.next());
//now keyValue contains the 19,20 and so on...
String body1 =keyValue.getString("body");
Log.d("test", "TEST ID" + body1);
}
Try this it might work.
Le meilleur moyen est de créer une clé statique, mais vous pouvez obtenir toutes les clés, puis obtenir la valeur de chacune d'entre elles
utilisez
JSONObject dataObj =new JSONObject("data");
Iterator<String> keys=dataObj.keys();
while (keys.hasNext())
{
JSONObject currentObject =dataObj.getJSONObject(keys.next());
String currentBody =currentObject.getString("body");
Log.d("test", "TEST ID" + currentBody);
}`
Double possible de Comment obtenir des éléments de JSONObject?