使用Java代码获取两个JSON字符串的差异

Pra*_*l N 14 java json

任何人都可以建议一些Java库或代码来获得两个JSON字符串的差异?

Mar*_*ten 12

我有完全相同的问题,最后写了我自己的库:

https://github.com/algesten/jsondiff

它同时进行差异/修补.

Diffs是JSON对象本身,具有对象合并/替换和数组插入/替换的简单语法.

例:

original
{
   a: { b: 42 }
}

patch
{
  "~a" { c: 43 }
}
Run Code Online (Sandbox Code Playgroud)

~指示对象合并.

result
{
   a: { b: 42, c: 43 }
}
Run Code Online (Sandbox Code Playgroud)


Sta*_*Man 11

对于一个特定的建议,您可以使用Jackson,将JSON字符串绑定到JSON树中,并将它们进行相等性比较.就像是:

ObjectMapper mapper = new ObjectMapper();
JsonNode tree1 = mapper.readTree(jsonString1);
JsonNode tree2 = mapper.readTree(jsonString2);
if (tree1.equals(tree2)) { 
  // yes, contents are equal -- note, ordering of arrays matters, objects not
} else { 
  // not equal
}
Run Code Online (Sandbox Code Playgroud)

等价比较是按值进行的,并且应该按照JSON数组,对象和原始值的预期工作.

  • 然而,这只是告诉你JSON是否不同; 如果它们恰好不同,它不会暗示这些差异是什么(差异/补丁). (8认同)

Jus*_*ner 4

就我个人而言,我建议将 JSON 字符串反序列化回对象并比较对象。

这样,您就不必担心两个 JSON 字符串之间的额外空格/格式(两个字符串的格式可能截然不同,但仍然代表相同的对象)。