どういうわけか、コマンドラインに簡単なマッピングを適用するには、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)に配置されます。Title
Title
Call Number
Congress
[
]
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