获取并更新嵌套的JSON属性值

时间:2017-07-04 21:01:49

标签: java json jackson objectmapper jackson-databind

我有一个嵌套的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 String替换fileContent值并将其放回到相同的eventFiles属性。我知道我可以使用Jackson Mapper将其转换为Map并逐个迭代它们,直到我找到eventFiles键,然后获取并替换该值并再次存储它。我尝试使用TypeReference<String, Object>或甚至TypeReference<Map<String, Map<String, Object>>>将其转换为Map,但这里的问题是嵌套的JSON,最终它将成为Map内部Map的Map,这将变得非常复杂。

还有其他更简单的方法来实现这一目标吗?任何建议都会非常有用。提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果您的Json具有固定格式,您可以使用Gson(https://github.com/google/gson)并将其转换为代表您的json的Object。

它看起来像这样:

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);

希望有所帮助