使用./jq对json文件进行排序和比较

问题描述 投票:0回答:1

我正在尝试使用 QueryJSON 插件与 WinMerge 比较两个长 json 文件。 这些文件中的属性按随机顺序排列。 .\jq 的参数确实有效,但嵌套对象不受影响:

QueryJSON ". | to_entries | sort_by(.key) | from_entries"

有一些“展平”命令没有提供我搜索的结果(可能使用不正确)。

Jsons 可以是例如:

{
   "Id": 1,
   "Addresses":[
      {"Street": "Street 1",
      "PostalCode": 12345},
      {"Street": "Street 2",
      "PostalCode": 12345}
   ],
   "Person":{
      "FirstName": "Mike",
      "LastName":"Boe"
   }
}


{
   "Id": 2,
   "Person":{
      "FirstName": "John",
      "LastName":"Boe"
   }
   "Addresses":[
      {"Street": "Street 3",
      "PostalCode": 12345},
      {"Street": "Street 2",
      "PostalCode": 12345}
   ]
}

我可以通过像这样指向嵌套对象来逐个比较它们

QueryJSON ".Person | to_entries | sort_by(.key) | from_entries"

但是有没有什么方法可以对这些对象内部的属性进行排序(即使这会使它们变平)?谢谢。

jq winmerge
1个回答
0
投票

jq
确实有一个选项可以对对象内的所有键进行排序:

--sort-keys / -S:

        Output the fields of each object with the keys in sorted order.

所以你可以使用以下命令:

jq --sort-keys .

或者,在 WinMerge 语法中:

QueryJSON --sort-keys "."
© www.soinside.com 2019 - 2024. All rights reserved.