提问人:Subhomoy Sikdar 提问时间:11/15/2023 最后编辑:Subhomoy Sikdar 更新时间:11/15/2023 访问量:44
修改后将 json 与嵌套元素进行比较
Compare a json with nested elements after it has been modifed
问:
我有一个用例,我想弄清楚 json 是如何修改的。我必须比较 2 个 json 对象,一个在修改之前,一个代表修改后的状态。json 中有许多嵌套对象和数组。 json 比较可以通过具有标准实现的 RFC 6902 和 RFC 7396 完成。
JSON 实际上是一个 Java 对象,它具有许多属性和对其他对象的引用。这会导致 2 个问题。如果更新了任何子对象的引用 ID,则意味着整个对象已被替换,而不仅仅是 id 字段。另一个是集合中对象的排序。我会尝试解释 2 种情况:
假设一个子对象(在本例中为 car)被修改如下id
// initial state
{
"employee": {
"id": 1,
"car": {
"id": 11,
"field1": "foo"
}
}
}
// modified state
{
"employee": {
"id": 1,
"car": {
"id": 12,
"field1": "foo"
}
}
}
然后,JSON 补丁将返回或指示已更新。但在我的用例中,这意味着删除了 id 为 11 的现有子对象,并在其位置放置了 id 为 12 的新对象汽车。{"employee":{"car":{"id":12}}}
[{"op":"replace","path":"/employee/car/id","value":12}]
id
car
第二个问题是,在收集的情况下,顺序应该无关紧要。因此,下面的 2 个 json 比较将返回该对象未被修改。
{
"employee": {
"id": 1,
"cars": [
{
"id": 11,
"field1": "foo"
},
{
"id": 12,
"field1": "bar"
}
]
}
}
// modified json
{
"employee": {
"id": 1,
"cars": [
{
"id": 12,
"field1": "bar"
},
{
"id": 11,
"field1": "foo"
}
]
}
}
但根据 RFC 的说法,集合的顺序很重要,更改项目的索引将返回更新。对于上述更改,补丁将返回或{"employee":{"cars":[{"id":12,"field1":"bar"},{"id":11,"field1":"foo"}]}}
[{"op":"replace","path":"/employee/cars/1/id","value":11},
{"op":"replace","path":"/employee/cars/1/field1","value":"foo"},
{"op":"replace","path":"/employee/cars/0/id","value":12},
{"op":"replace","path":"/employee/cars/0/field1","value":"bar"}]
我可能可以为这两种情况编写自定义代码,但我想了解是否有任何 json 补丁实现 (java) 可以处理这两种情况,或者是否有一些库可以支持这一点。或者,如果有人知道如何最好地解决问题。
提前致谢。
答: 暂无答案
评论
id
id