2017-07-04 41 views
0

我有一個嵌套的JSON,看起來像這樣。獲取和更新嵌套的JSON屬性值

{ 
"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."}] 
    } 
} 

這裏我取eventFiles鍵,替換字符串Base64Encoded的fileContent值,並把它回到同一eventFiles屬性。我知道我可以使用Jackson Mapper將它轉換爲Map,並逐個迭代它們,直到找到eventFiles鍵,然後獲取並替換該值並將其存回。我試圖用TypeReference<String, Object>甚至TypeReference<Map<String, Map<String, Object>>>將它轉換爲Map,但是這裏的問題是嵌套的JSON,最終它會變成地圖內的地圖,而地圖內部的地圖會變得非常複雜。

有沒有其他更簡單的方法來實現這個目標?任何建議都會非常有幫助。提前致謝。

回答

1

如果您的Json具有固定格式,您可以使用Gson(https://github.com/google/gson)並將其轉換爲表示您的json的對象。

這將是這個樣子:

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

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

public class CustomFile { 
    String fileName; 
    String fileContent; 
} 

而且你可以使用這樣的:

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

String modifiedJson = gson.toJson(event); 

希望它幫助

+0

謝謝您的回答。我不會有固定的格式。它不斷變化。所以動態我必須完成這個。 – 15R6