【问题标题】:Fetch and Update Nested JSON attribute value获取和更新嵌套 JSON 属性值
【发布时间】:2017-07-04 21:01:49
【问题描述】:

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

还有其他更简单的方法可以实现吗?任何建议都会非常有帮助。提前致谢。

【问题讨论】:

    标签: java json jackson objectmapper jackson-databind


    【解决方案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);
    

    希望对你有帮助

    【讨论】:

    • 感谢您的回答。我不会有固定的格式。它不断变化。所以我必须动态地完成这个。
    猜你喜欢
    • 2022-10-12
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多