JSONファイルへの単純な文字列マッピングの適用

JSONファイルへの単純な文字列マッピングの適用

どういうわけか、コマンドラインに簡単なマッピングを適用するには、1行のコードが必要です。この場合、JSONのキーは(通常のように)コンテキストを提供し、私たちが置き換えてはいけない文字列を愚かに置き換えないようにします。

JSONファイルを使用してライブラリディレクトリが提供されたとします。 デュイ10進分類

[
  {
    "Title": "Design Pattern",
    "Call Number": "005.12 DES"
  },
  {
    "Title": "Intro to C++",
    "Call Number": "005.133 C STR"
  }
]

そしてデュイと 国会図書館 電話番号

[
  {
    "Dewey": "005.12 DES",
    "Congress": "QA76.64 .D47 1995X"
  },
  {
    "Dewey": "005.133 C STR",
    "Congress": "QA76.73.C153 S77 2013"
  }
]  

出力ファイルを生成したい。

[
  {
    "Title": "Design Pattern",
    "Call Number": "QA76.64 .D47 1995X"
  },
  {
    "Title": "Intro to C++",
    "Call Number": "QA76.73.C153 S77 2013"
  }
]

jq処理される単一行変換セットにはまだ適していますか?

ベストアンサー1

次のjqコマンド:

jq -s '[
    JOIN(
        INDEX(.[0][]; ."Call Number");
        .[1][];
        .Dewey;
        { Title: .[1].Title, "Call Number": .[0].Congress }
    )
]' catalog dewey_mappings

これはlikeとを使って2つのファイルを別々の配列として読み込みます.[0].[1]jq -s

インデックスは、最初のファイルのフィールドに基づいてCall Number計算されます。このインデックスは、2番目のファイルのフィールドJOINに対して関係演算を実行するために使用されます。Dewey

抽出された要素のペアから、2番目のファイルのフィールドからフィールドを取得し、最初のファイルのフィールドからフィールドを取得するオブジェクトを作成しますJOIN。生成されたすべてのオブジェクトは配列(soとaround)に配置されます。TitleTitleCall NumberCongress[]JOIN

結果は次のJSON文書になります。

[
  {
    "Title": "Design Pattern",
    "Call Number": "QA76.64 .D47 1995X"
  },
  {
    "Title": "Intro to C++",
    "Call Number": "QA76.73.C153 S77 2013"
  }
]

また、「SQLスタイル演算子」というタイトルのマニュアルセクションも参照してくださいjq


Deweyマップファイルをインデックスとして使用し、ディレクトリのDeweyコードを使用してクエリを実行すると、より自然に感じられます。

jq -s '[
    JOIN(
        INDEX(.[0][]; .Dewey);
        .[1][];
        ."Call Number";
        { Title: .[0].Title, "Call Number": .[1].Congress }
    )
]' dewey_mappings catalog

おすすめ記事