1
votes

Fusion du résultat JSON dans Java

J'ai deux JSONObjects comme indiqué ci-dessous

{
"movieId":1001,
"movieName":"Bahubali",
"director":"Rajamouli"
//little more details
}

Le résultat arrive comme:

{"
movieId":1001,
"movieName":"Bahubali"
//little more details
}
{
"movieId":1001,
"Director":"Rajamouli"
//little more details
}

Je veux le résultat comme:

ProductionCast castDetails =restTemplate.getForObject(url, ProductionCast.class);
MovieDetails movieDetails = movieDao.getDetailsOfCast(id).orElse(new MovieDetails());

//more code
return list;  //list of two objects *List<Object>*

Puis-je faire quelque chose pour fusionner le résultat JSON? Je veux fusionner cela basé sur "movieId".

Edit: Ma question a été identifiée comme dupliquée. ici, je veux fusionner les objets qui renvoient le résultat au format JSON en utilisant @RestController. Je n'utilise aucun type d'objets JSON. J'espère que vous avez compris.


5 commentaires

vous renvoyez la liste, mais comment préparez-vous la liste? Veuillez montrer cette partie


en créant List et en ajoutant ces deux objets


Est-ce que cela aide stackoverflow.com/questions/35747813/... ?


Est-ce que cela répond à votre question? Comment fusionner deux chaînes json en une seule en java


J'ai déjà essayé le lien que vous avez fourni. Je n'ai toujours pas la bonne réponse, je l'ai donc postée ici. Veuillez vérifier la question modifiée.


3 Réponses :


0
votes

Créez une classe dto qui a des champs movieId, movieName et director. Créez une instance de celui-ci avec vos champs d'objets castDetails et movieDetails ci-dessus et renvoyez l'objet dto


2 commentaires

c'est bien quand j'ai 3 champs comme tu l'as dit. Et si j'ai 100 champs, dois-je utiliser des setters pour tous? car tous les champs seront en privé.


Bon point. L'utilisation du modèle Builder serait une solution pour ne pas utiliser tous les setters de champs lorsque vous créez votre objet dto



2
votes

si vous voulez fusionner avec une entité différente lors du retour.

vous pouvez essayer @JsonUnwrapped

{
"movieId":1001,
"movieName":"Bahubali",
"director":"Rajamouli"
}

Il va retourner p >

  public class Result{
   @JsonUnwrapped
   private ProductionCast castDetails;

   @JsonUnwrapped
   private MovieDetails movieDetails
  }

a besoin d’attention. le @JsonUnwrapped ne peut pas être appliqué sur List


1 commentaires

Il affiche movieId 2 fois. {"movieId": 1001, "movieName": "chirutha", "movieId": 1001, "director": "Puri Jagannath"}



0
votes

Vous pouvez faire une UNION (combiner sans doublons) en mettant toutes vos valeurs dans un HashMap. Toutes les clés égales seront écrasées. Voici un exemple utilisant quatre manières différentes (GSON, org.json, jackson-core et json-simple) pour créer votre JSON à partir de la carte.

Voici un exemple de travail. J'utilise la réflexion pour remplir la carte. Ce n'est peut-être pas ce que vous voulez.

{
  "director" : "Rajamouli",
  "movieId" : "1001",
  "movieName" : "Bahubali"
}

public class Test {

  public static void main(String[] args) throws JsonProcessingException, IllegalAccessException {

    ProductionCast productionCast = new ProductionCast("1001", "Rajamouli");
    MovieDetails movieDetails = new MovieDetails("1001", "Bahubali");

    Map<String, String> map = new HashMap<>();
    fillMap(map, productionCast);
    fillMap(map, movieDetails);

    ObjectMapper mapper = new ObjectMapper();
    System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map));

  }

  private static void fillMap(Map<String, String> map, Object object) throws IllegalAccessException {
    Field[] fields = object.getClass().getDeclaredFields();
    for(Field field:fields) {
        map.put(field.getName(), (String) field.get(object));
    }
  }

  private static class ProductionCast {
    public ProductionCast(String movieId, String director) {
        this.movieId = movieId;
        this.director = director;
    }

    public String getMovieId() {
        return movieId;
    }

    public String getDirector() {
        return director;
    }

    private String movieId;
    private String director;
  }

  private static class MovieDetails {
    private String movieId;
    private String movieName;


    public MovieDetails(String movieId, String movieName) {
        this.movieId = movieId;
        this.movieName = movieName;
    }

    public String getMovieId() {
        return movieId;
    }

    public String getMovieName() {
        return movieName;
    }
  }
}


0 commentaires