J'ai un objet JSON comme suit:
//response.body().string() is the above json object JSONArray jsonArray = new JSONArray(response.body().string()); jsonObjectRoot = new JSONObject(response.body().string());
J'essaie d'en obtenir deux objets JSON ; jeton et utilisateur. J'ai essayé deux méthodes différentes mais les deux échouent:
{
"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9",
"user":{
"pk":17,
"username":"user1",
"email":"user1@gmail.com",
"first_name":"",
"last_name":""
}
}
Est-ce que quelqu'un pourrait me dire comment je pourrais diviser cela en deux objets JSON ?
4 Réponses :
Vous pouvez analyser une chaîne json avec
var token = obj.token; var user = obj.user;
Vous pouvez filtrer les sous-parties d'un objet json en les adressant simplement
var obj = JSON.parse(jsonString);
Je ne pense pas que ce soit Java?
Ce n'est pas. Ce serait le côté Javascript de la solution, ce qui n'est pas ce que vous recherchiez. ;)
Vous pouvez le diviser de cette façon:
Token object => {"token":["eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9"]}
User object => {"user":{"last_name":"","pk":17,"first_name":"","email":"user1@gmail.com","username":"user1"}}
Le code ci-dessus imprime:
// source object
JSONObject sourceObject = new JSONObject(sourceJson);
String tokenKey = "token";
// create new object for token
JSONObject tokenObject = new JSONObject();
// transplant token to new object
tokenObject.append(tokenKey, sourceObject.remove(tokenKey));
// if append method does not exist use put
// tokenObject.put(tokenKey, sourceObject.remove(tokenKey));
System.out.println("Token object => " + tokenObject);
System.out.println("User object => " + sourceObject);
ressemble à append ne se résout pas dans tokenObject.append
@NabatFarsi, quelle bibliothèque utilisez-vous et dans quelle version? N'utilisez pas org.json
sa bibliothèque intégrée dans le studio Android,
@NabatFarsi, je suppose que c'est org.json . Pouvez-vous au moins afficher les importations pour les classes JSONObject et JSONArray ?
vous avez raison, c'est org.Json, donc probablement une version différente, je vais l'examiner plus en détail
@NabatFarsi, dans ce cas, vous devez utiliser la méthode put : tokenObject.put (tokenKey, sourceObject.remove (tokenKey)); . Vérifiez la réponse mise à jour.
Le moyen le plus sûr / plus propre de le faire est de créer un POJO et de désérialiser votre JSON en utilisant Jackson. Votre pojo:
ObjectMapper mapper = new ObjectMapper(); MyObject myObject = mapper.readValue(jsonString, MyObject.class); String token = myObject.token; User user = myObject.user; ...
Ensuite, lorsque vous souhaitez désérialiser:
import com.fasterxml.jackson.databind.ObjectMapper;
et
public class MyObject {
String token;
User user;
static class User {
int pk;
String username;
String email;
String first_name;
String last_name;
}
}
J'ai récemment fait face à la même situation, j'ai utilisé le code ci-dessous qui a fonctionné pour moi:
token::eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
user:{"last_name":"","pk":17,"first_name":"","email":"user1@gmail.com","username":"user1"}
Ici, je crée un nouveau JSONObject vide, puis je place l'objet récupéré de l'objet d'origine dans le JSONObject nouvellement créé.
Vous pouvez également vérifier la sortie en sysout simplement:
System.out.println("token:" + tokenObject.get("token"));
System.out.println("user:" + userObject.get("user"));
Sortie dans mon cas:
JSONObject jo1 = new JSONObject(output);
JSONObject tokenObject = new JSONObject();
tokenObject.put("token", jo1.get("token"));
JSONObject userObject = new JSONObject();
userObject.put("user", jo1.get("user"));
Quelle langue utilisez-vous? JavaScript ou Java?
C'est en Java dans Android Studio