使用 jq 查找 JSON 字典中不属于另一个字典的所有元素

mat*_*mat 1 bash json jq

我必须 JSON 文件。

a.json

[ 
  { key1: "foo", key2: "bar"},
  { key1: "foo", key2: "baz"},
  { key1: "bla", key2: "blubb"},
]
Run Code Online (Sandbox Code Playgroud)

b.json

[ 
  { key1: "foo", key2: "bar"},
  { key1: "foo", key2: "oof"},
  { key1: "bla", key2: "bla"},
]
Run Code Online (Sandbox Code Playgroud)

我想要的结果是一个数组,其中包含第一个字典的所有条目,这些条目不属于第二个字典的一部分(相当于 SQL 中 DISTINCT 运算符的作用)。所以预期的输出是:

[ 
  { key1: "foo", key2: "baz"},
  { key1: "bla", key2: "blubb"},
]
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用 来实现这一点jq

0st*_*ne0 5

找不到有效的重复项,因此将其发布为答案。


如果使用-s(slurp),则可以使用object1 - object2来获取它们之间的差异:

jq -s  '.[0] - .[1]' a b
Run Code Online (Sandbox Code Playgroud)

将输出:

jq -s  '.[0] - .[1]' a b
Run Code Online (Sandbox Code Playgroud)

  • 无吸食的替代品:“jq”。- 输入'a.json b.json` (4认同)