Jackson 序列化自定义 TreeNode 对象以返回 JSONObject



我有一个这样的对象:

public class TreeNodeLabel {
    TreeNodeLabel parent;
    List<TreeNodeLabel> children;
    Map<String, String> prop;
    String name;
}

我想像这样获得 JSONObject

"data": {
    "auth": {
      "myChallenges": "Visualiser vos défis",
      "myMessages": "Accéder à la messagerie",
      "myProfile": "Accéder à votre profil",
      "myGroup": "Accéder à vos groupes",
      "launchChallenge": "Lancer un défi",
      "login": {
        "login": "Me connecter",
        "label": "Connectez-vous",
        "loginLabel": "E-mail",
        "passwordLabel": "Mot de passe",
        "action": "Je me connecte",
        "sign": "M'inscrire",
        "facebook": "Facebook",
        "google": "Google",
        "lost": "Mot de passe oublié ?",
        "lostParam": "Hey {name}, déjà {passwordCount, number} {passwordCount, plural, one {mot de passe oublié} other {mots de passe oubliés}} ce mois ci !",
        "useSocialNetwork": "Utilisez vos réseaux sociaux pour vous connecter",
        "noAccount": "Je n'ai pas de compte",
        "errors": {
          "loginRequired": "Email requis",
          "loginFormat": "Format de l'email incorrect",
          "passwordRequired": "Mot de passe obligatoire",
          "passwordFormat": "Format invalide"
        }
      },
      "socialNetworkErrors": {
        "missingPermissions": "Vous devez partager votre email pour vous connecter avec votre compte Facebook.",
        "inProgress": "Une connexion via Google est déjà en cours.",
        "playServicesNotAvailable": "Les services Google Play ne sont pas installés ou pas à jour."
      }
    },
    "message": {
      "chatView": {
        "loadPreviousMessages": "Charger les messages précédents",
        "send": "Envoyer",
        "placeholder": "Ecrivez un message..."
      },
      "conversation": {
        "duration": "Il y a"
      }
    }
}

我尝试了一些不同的注释,例如(@JsonManagedReference,@JsonIgnore,@JsonProperty)但获取包含名为"child","prop"的对象的JSON,而不是每个子对象的属性"name"以及此下的prop列表

您可以将标有 @JsonValue 的方法添加到生成所需结构的 TreeNodeLabel 类中。

例如

    @JsonValue
    public Map<String, Map<String, Object>> jsonValue() {
        Map<String, Map<String, Object>> values = new HashMap<>();
        Map<String, Object> propValues = new HashMap<>();
        propValues.putAll(prop);
        // add each of the children.
        for (TreeNodeLabel child : children) {
            propValues.putAll(child.jsonValue());
        }
        values.put(name, propValues);
        return values;
    }

如果你也想反序列化,那么你需要添加一个@JsonCreator。

最新更新