2 votes

Chaîne Json vers objet Java avec nom de clé dynamique

J'essaie d'analyser cette chaîne json structurée en objet Java, mais j'échoue à chaque tentative.

{
  "message": "Test Message",
  "status": true,
  "users": {
    "user_xy": [
      {
        "time": "2016-08-25 19:01:20.944614158 +0300 EEST",
        "age": 24,
        "props": {
          "pr1": 197,
          "pr2": 0.75,
          "pr3": 0.14,
          "pr4": -0.97
        }
      }
    ],
    "user_zt": [
      {
        "time": "2016-08-25 17:08:36.920891187 +0300 EEST",
        "age": 29,
        "props": {
          "pr1": 1.2332131860505051,
          "pr2": -0.6628148829634317,
          "pr3": -0.11622442112006928
        }
      }
    ]
  }
}

Le champ "props" peut contenir 1 ou 6 propriétés, en fonction de l'enregistrement de la base de données. De plus, la partie Nom d'utilisateur change dynamiquement.

Puis-je analyser avec succès cette chaîne structurée avec Jackson Lib ?

5voto

Nirav Chhatrola Points 299

Vous devez créer une structure calss comme ci-dessous pour faire correspondre votre chaîne de caractères à un objet Java.

Créer une classe pour les détails

public class Details {
    private String message;
    private String status;
    private Map<String, List<UserDetails>> users = new HashMap<String, List<UserDetails>>();
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public Map<String, List<UserDetails>> getUsers() {
        return users;
    }
    public void setUsers(Map<String, List<UserDetails>> users) {
        this.users = users;
    }
}

Créer la classe UserDetails comme ci-dessous.

public class UserDetails {
    private String time;
    private String age;
    private Map<String, String> prop = new HashMap<String, String>();
    public String getTime() {
        return time;
    }
    public void setTime(String time) {
        this.time = time;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public Map<String, String> getProp() {
        return prop;
    }
    public void setProp(Map<String, String> prop) {
        this.prop = prop;
    }   
}

Vous pouvez maintenant associer votre chaîne de caractères à la classe Details.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X