String
對 JSON 文件應用簡單的字元串映射
不知何故,我認為必須有一個單行來在命令行上應用簡單的映射。在這種情況下,JSON 中的鍵將(像往常一樣)提供上下文,確保我們不會愚蠢地替換不應該替換的字元串。
假設我們使用 杜威十進分類法在 JSON 文件中給出了一個圖書館目錄
[ { "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
?
以下
jq
命令:jq -s '[ JOIN( INDEX(.[0][]; ."Call Number"); .[1][]; .Dewey; { Title: .[1].Title, "Call Number": .[0].Congress } ) ]' catalog dewey_mappings
這會將兩個文件分別讀入一個數組
.[0]
,.[1]
分別使用jq -s
.計算第一個文件的
Call Number
欄位的索引。該索引用於對第二個文件的欄位進行關係JOIN
操作。Dewey
JOIN
從提取的元素對中,創建一個對象,該對象的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-Style Operators”的部分
jq
。如果使用 Dewey 映射文件作為索引並使用目錄中的 Dewey 程式碼查詢它感覺更自然:
jq -s '[ JOIN( INDEX(.[0][]; .Dewey); .[1][]; ."Call Number"; { Title: .[0].Title, "Call Number": .[1].Congress } ) ]' dewey_mappings catalog