[JAVA] Comment assembler JSON directement dans Jackson

introduction

De temps en temps, j'écrirai du code Java ... (Non, c'est le langage principal de mon entreprise), donc je posterai ce que j'ai recherché dans le cas dont je suis actuellement en charge.

Utilisez-vous le Spring Framework? Récemment, le côté serveur est souvent construit avec Node.js, Ruby, etc., et le côté PaaS a un mécanisme qui peut facilement fournir une API Web, il est donc assez rare de l'implémenter en Java. Je me demande, mais je suis toujours actif, donc je suis toujours en train de coder Java dans le projet actuel.

Cette fois, c'est une spécification un peu inhabituelle, et au lieu de mapper le JSON reçu par l'API Web construite dans Spring Framework vers POJO, nous avons décidé de le traiter tel quel (dynamiquement) et de le relier à une autre API Web. Ensuite, quand j'ai regardé Javadoc, je me suis demandé comment j'aurais dû créer JSON sans utiliser POJO dans Jackson, et j'ai trouvé que je devais faire ce qui suit.

Créer un ObjectNode dans Jackson

ʻObjectMapper a fourni une méthode appelée createObjectNode () `. Vous pouvez l'utiliser pour créer un objet JSON vide.

Utilisez put (fieldName, value) pour ajouter une valeur simple à cet objet. Utilisez set (fieldName, value) lors de l'ajout d'un objet ou d'un tableau.

Voici un exemple.

ObjectMapper mapper = new ObjectMapper();
ObjectNode root = mapper.createObjectNode();
root.put("stringValue", "test");
root.set("brankObject", mapper.createObjectNode());

Créer un ArrayNode avec Jackson

Lorsqu'il s'agit de tableaux, ʻObjectMapper a fourni une méthode appelée createArrayNode () . Vous pouvez l'utiliser pour créer un tableau JSON vide. Utilisez ʻadd (value) pour ajouter des éléments à ce tableau.

Voici un exemple.

ObjectMapper mapper = new ObjectMapper();
ArrayNode array = mapper.createArrayNode();
array.add("value");
array.add(mapper.createObjectNode());

Exemple de construction de JSON

C'est très inutile, mais si vous assemblez vous-même JSON à partir de POJO, ce sera comme ça.

public class Test {
    public List<Item> items = Arrays.asList(
            new Item("Item 1", "$19.99", Arrays.asList(new Feature("New!"), new Feature("Awesome!"))),
            new Item("Item 2","$29.99", Arrays.asList(new Feature("Old."), new Feature("Ugly."))));

    public static class Item {
        Item(String name, String price, List<Feature> features) {
            this.name = name;
            this.price = price;
            this.features = features;
        }

        public String name, price;
        public List<Feature> features;
    }

    public static class Feature {
        Feature(String description) {
            this.description = description;
        }

        public String description;
    }
    
    public static void main(String[] args) throws IOException {
        Test test = new Test();

        ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
        ObjectNode root = mapper.createObjectNode();
        ArrayNode items = mapper.createArrayNode();
        for (Item itemsObj : test.items) {
            ObjectNode item = mapper.createObjectNode();
            item.put("name", itemsObj.name);
            item.put("price", itemsObj.price);
            ArrayNode features = mapper.createArrayNode();
            for (Feature featuresObj : itemsObj.features) {
                ObjectNode feature = mapper.createObjectNode();
                feature.put("description", featuresObj.description);
                features.add(feature);
            }
            item.set("features", features);
            items.add(item);
        }
        root.set("items", items);

        System.out.println(mapper.writeValueAsString(root));
        //Après tout, le résultat de sortie sera le même que ci-dessous
        // System.out.println(mapper.writeValueAsString(test));
    }
}

Résultat de sortie

{
  "items" : [ {
    "name" : "Item 1",
    "price" : "$19.99",
    "features" : [ {
      "description" : "New!"
    }, {
      "description" : "Awesome!"
    } ]
  }, {
    "name" : "Item 2",
    "price" : "$29.99",
    "features" : [ {
      "description" : "Old."
    }, {
      "description" : "Ugly."
    } ]
  } ]
}

Résumé

Les performances, etc. ne sont pas tellement prises en compte, mais veuillez vous y référer lors de la création de JSON directement avec Java + Jackson.

Recommended Posts

Comment assembler JSON directement dans Jackson
Comprendre comment utiliser le décodeur JSON de Swift en 3 minutes
Comment utiliser les données JSON dans la communication WebSocket (Java, JavaScript)
Comment utiliser Lombok au printemps
Comment exécuter JUnit dans Eclipse
Comment itérer indéfiniment en Ruby
Comment exécuter Ant dans Gradle
Comment maîtriser la programmation en 3 mois
Comment apprendre JAVA en 7 jours
Comment obtenir des paramètres dans Spark
Comment installer Bootstrap dans Ruby
Comment installer jQuery dans Rails 6
Comment utiliser les classes en Java?
Comment nommer des variables en Java
Comment définir Lombok dans Eclipse
Comment concaténer des chaînes avec Java
Comment installer Swiper in Rails
Comment POST JSON dans la méthode Java en utilisant OkHttp3 et la méthode en utilisant HttpUrlConnection-
Je veux obtenir des propriétés sous forme de chaînes JSON dans Jackson!
[swift5] Comment spécifier la couleur en hexadécimal
Comment implémenter la fonctionnalité de recherche dans Rails
Comment implémenter le filtre de Kalman par Java
Comment changer le nom de l'application dans les rails
Comment utiliser le volume nommé dans docker-compose.yml
Comment filtrer JUnit Test dans Gradle
Comment insérer une vidéo dans Rails
Comment normaliser le pied de page d'en-tête dans Thymeleaf
Comment ajouter un fichier jar dans ScalaIDE
Comment utiliser Docker dans VSCode DevContainer
Comment utiliser MySQL dans le didacticiel Rails
Comment intégrer Janus Graph dans Java
[rails] Comment configurer le routage dans les ressources
Pour écrire des données de réponse directement dans Spring
Comment obtenir la date avec Java
Comment implémenter la fonctionnalité de classement dans Rails
Comment utiliser les variables d'environnement dans RubyOnRails
Comment implémenter le traitement asynchrone dans Outsystems
Comment publier une bibliothèque dans jCenter
Comment spécifier l'attribut id dans JSF
Comprendre en 5 minutes !! Comment utiliser Docker
Comment écraser les données Firebase avec Swift
[Pour les débutants] Comment déboguer avec Eclipse
Comment utiliser ExpandableListView dans Android Studio
Comment afficher les messages d'erreur en japonais
Exemple de code pour la sérialisation et la désérialisation des énumérations Java Enum et JSON dans Jackson
Développement Android, comment vérifier null dans la valeur de l'objet JSON
Résumé de la sélection des éléments dans Selenium
Comment obtenir les informations d'identification Keycloak dans la classe d'intercepteur
[Java FX] Comment écrire des autorisations Eclipse dans build.gradle
Comment vérifier le journal dans le conteneur Docker
Comment colorer la sortie de la console de code dans Eclipse
[Rails] Comment utiliser les boîtes de sélection dans Ransack
Code pour échapper aux chaînes JSON en Java