3
votes

Comment diviser une chaîne JSON en deux objets JSON en Java

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 ?


2 commentaires

Quelle langue utilisez-vous? JavaScript ou Java?


C'est en Java dans Android Studio


4 Réponses :


1
votes

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


2 commentaires

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



0
votes

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


6 commentaires

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.



0
votes

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


0 commentaires

0
votes

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


0 commentaires