我的java应用程序使用复杂的对象图,这些对象图被杰克逊注释并序列化为json,以供客户端使用。最近,我不得不更改域模型中的一个对象,使得它不是包含X
类型的两个子项,而是包含Set<X>
。此更改的对象由模型中的几种类型的对象引用。
现在的问题是我有大量的json形式的测试数据用于运行我需要转换为这个新对象模型的单元测试。我首先考虑更新json文件是使用旧版本的java对象模型来反序列化json数据,使用新版本对象模型创建新对象,从旧对象中水化新对象,然后最终将新对象序列化回来JSON。我意识到,编程创建匹配的对象图然后保湿这些对象图的过程可能与手工修复json一样乏味,因为对象图相对较深而且不是简单的克隆。
我想知道如何完全手动修复这些json文件?即使是非基于java的json转换或解析工具,我也会接受任何建议。
答案 0 :(得分:1)
一种可能性,如果有问题的对象在结构上足够紧密相关,那就是使用一个数据绑定设置读取,使用另一个设置写入。
例如:如果使用Jackson,您可以考虑实现自定义set和get方法;这样就可以为子类型存在setter;但只有Set
值的吸气剂。类似的东西:
``` 公共课POJO { 私人X a,b;
public void setA(X value){a = value; } public void setB(X value){b = value; }
public X [] getValues(){ 返回新的X [] {a,b}; } ```
举例来说,将读取POJO
具有两个对象值属性“a”和“b”的结构,但写入结构具有一个属性“values”,JSON数组为2对象。
这只是读入(反序列化)和序列化(写出)不需要对称或相同的基本思想的一个例子。