【问题标题】:Is there any way to preserve the order while generating patch for json files ?有没有办法在为 json 文件生成补丁时保留顺序?
【发布时间】:2015-04-06 03:44:27
【问题描述】:

我是 Json 的新手,即 JSON PATCH。 我有一个场景,我需要找出同一对象的两个版本的 Json 文件之间,因为我正在使用 json-patch-master。 但不幸的是,补丁生成的解释不同,即顺序不同,因此得到意外/无效的结果。 谁能帮我在生成 Json Patch 时如何保留订单?

**Here is the actual example.
Original Json file :**

[ {
  "name" : "name1",
  "roolNo" : "1"
}, {
  "name" : "name2",
  "roolNo" : "2"
}, {
  "name" : "name3",
  "roolNo" : "3"
}, {
  "name" : "name4",
  "roolNo" : "4"
} ]


**Modified/New Json file:  i.e. removed 2nd node of original file.**

[ {
  "name" : "name1",
  "roolNo" : "1"
}, {
  "name" : "name3",
  "roolNo" : "3"
}, {
  "name" : "name4",
  "roolNo" : "4"
} ]

**Patch/Diff Generated :**

[ {"op":"remove","path":"/3"},
{"op":"replace","path":"/1/name","value":"name3"},
{"op":"replace","path":"/1/roolNo","value":"3"},
{"op":"replace","path":"/2/name","value":"name4"},
{"op":"replace","path":"/2/roolNo","value":"4"}]

Very time I generate Diff/Patch it is giving different path/diff results.
And moreover the interpretation is different i.e. order is not preserving.

**Is there any way to get expected results i.e. [ {"op":"remove","path":"/1"} ] , in other words generated a patch/diff based some order so will get what is expected. ?
How to handle this kind of scenario ?**

Please help me.

Thank you so much.
~Shyam

【问题讨论】:

标签: json validation getjson geojson json-patch


【解决方案1】:

我们目前正在Starcounter-Jack/JSON-Patch 处理此问题。

它似乎与原生 Array.Observe- http://jsfiddle.net/tomalec/p4s7aw96/ 配合得很好。

试试Starcounter-Jack/JSON-Patch issues/65_ArrayObserve branch 我们将在检查 shim 和性能后将其作为新版本发布。

欢迎通过JSON-Patch issue board添加您的 cmets

【讨论】:

  • 谢谢。可能我的问题有一些模棱两可,让我正确地说。当我生成 diff/patch 时,它显示一个节点已被删除,并且还显示一些其他节点正在被替换,实际上我只删除了一个节点。发生这种情况是因为补丁无法保留或维护节点的顺序.....所以我需要一些方法让补丁按特定顺序生成差异,以便结果正确。
  • @user3252097,目前正在进行中,请检查jsfiddle.net/tomalec/p4s7aw96 repo 在这里github.com/tomalec/JSON-Patch/tree/issues/65_ArrayObserve_shim 不幸的是,它无法使其与 shimed Array.observe 一起工作,因此它仍然需要本机支持.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2018-07-23
  • 2019-04-17
  • 2019-05-20
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多