jqでjsonファイルをキーとそれらのキーの値で並べ替える方法 質問する

jqでjsonファイルをキーとそれらのキーの値で並べ替える方法 質問する

私たちは、ダッシュボードの一部に JSON 形式のファイルを書き出すグラフィカル ダッシュボード エディターを備えた Pentaho CTools ライブラリを使用して Web サイトを構築しています。

Git にチェックインする前に、これらのファイルに変換を適用して、キーで並べ替え、次に特定のキーの値で並べ替えたいと思います。エディターはすべての json フィールドを再配置する傾向があるため、差分を簡単にするのが目的です。

たとえば、次のようなものが考えられます。

{
  "components": {
    "rows": [
      {
        "id": "CHARTS",
        "name": "Charts",
        "parent": "UnIqEiD",
        "properties": [
          {
            "name": "Group",
            "type": "Label",
            "value": "Charts"
          }
        ],
        "type": "Label",
        "typeDesc": "<i>Group</i>"
      },
      {
        "id": "kjalajsdjf",
        "meta_cdwSupport": "true",
        "parent": "CHARTS",
        "properties": [
          {
            "name": "name",
            "type": "Id",
            "value": "Value1"
          },
          {
            "name": "title",
            "type": "String",
            "value": "Value2"
          },
          {
            "name": "listeners",
            "type": "Listeners",
            "value": "[]"
          },
...

私たちはjq --sort-keyshttp://stedolan.github.io/jq/) を使用してすべてのキーを並べ替えるのですが、その関数を使用して特定の要素を特定のキーの値で並べ替える方法を見つけるのに苦労しています(つまり、上記の例では、たとえばsort_by並べ替える) 。何かアイデアはありますか?properties.name

ベストアンサー1

IRC チャネルでの支援のおかげで、答えを見つけることができました。

基本的には次のようになります。

jq \
  '.components.rows|=sort_by(.id)|.components.rows[].properties|=sort_by(.name)' \
  file.json > out.json

適切なオブジェクトを選択し、
必要に応じて配列に移動して、単一の値を選択
します。sort_by

試してみたsort_by(.components.rows.id)が失敗した。

|=値を削除する代わりに|、値を渡します。

おすすめ記事