2017-07-04 3 views
0

J'ai un JSON imbriqué qui ressemble à ceci.Récupère et met à jour la valeur de l'attribut JSON imbriqué

{ 
"eventId" : "12345", 
"eventName" : "carnival", 
"object": { 
    "objectId" : "5678", 
    "objectFiles" : [{"fileName":"text.txt", "fileContent":"This is a test file."}, 
        {"fileName":"text2.txt", "fileContent":"This is a test2 file."}] 
    } 
} 

Ici je dois chercher les eventfiles clé, remplacez la valeur ContenuFichier avec Base64Encoded chaîne et placez-le à la même eventfiles attribut. Je sais que je peux utiliser Jackson Mapper pour le convertir en Map et les parcourir un par un, jusqu'à ce que je trouve la clé eventFiles, puis récupérer et remplacer la valeur et la stocker à nouveau. J'ai essayé de le convertir en carte en utilisant TypeReference<String, Object> ou même TypeReference<Map<String, Map<String, Object>>> mais le problème ici est le JSON imbriqué où finalement il deviendrait Carte à l'intérieur d'une Carte à l'intérieur d'une Carte qui deviendrait assez complexe à manipuler.

Existe-t-il un autre moyen plus simple d'accomplir ceci? Toute suggestion serait vraiment utile. Merci d'avance.

Répondre

1

Si votre Json a un format fixe, vous pouvez utiliser Gson (https://github.com/google/gson) et le convertir en un objet qui représente votre json.

Il ressemblerait à quelque chose comme ceci:

public class CustomEvent { 
    String eventId; 
    String eventName; 
    CustomObject object; 
} 

public class CustomObject { 
    String objectId; 
    List<CustomFile> objectFiles; 
} 

public class CustomFile { 
    String fileName; 
    String fileContent; 
} 

Et vous pouvez l'utiliser comme ceci:

Gson gson = new Gson(); 
CustomEvent event = gson.fromJson(yourString, Event.class) 
// Do whatever you want with the event 

String modifiedJson = gson.toJson(event); 

L'espoir a aidé

+0

Merci pour votre réponse. Je n'aurais pas de format fixe. Ça continue de changer. Donc, dynamiquement, je dois accomplir cela. – 15R6