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

时间:2019-01-09 14:01:46

标签: java serialization jackson treenode

我有一个像这样的对象:

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) 但获取的JSON包含名为“ children”,“ prop”的对象,而不是每个子对象的属性“ name”以及此

下的prop列表

1 个答案:

答案 0 :(得分:0)

您可以将标记为@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。