我是jq的新手,這個帖子是由于不了解jq背后的機制。
我可以開發一個bash腳本,它可以做我想做的事情,但是jq和它的JSON超能力讓我很感興趣,我想通過應用于現實世界的場景來學習它。這里有一個......
我最接近我所需要的是使用一個 INDEX 和一個 $x . 然而,我只能從我的第二個(c2)json中獲得最后一項。
所以,我的問題是:
有兩個JSON檔案:
JSON#1將有唯一的 "id "和 "type "鍵--以及其他鍵/值對,為了讓我的帖子更清晰,我已經洗掉了這些鍵。JSON#2 將包含多個/非唯一的 "型別 "鍵,我想在這兩個 JSON 檔案上進行匹配。這個JSON#2 還將包含其他的鍵/值對,這些鍵/值對預計將包含在結果的輸出中。
我的輸出要求是。 我想獲得一個(每行一個或一個陣列)c1和c2陣列之間的所有匹配的鍵/值對的組合串列,其中 "型別 "鍵(字串)的值在c1和c2之間完全匹配。
還有一個問題,如果將解決方案擴展到同時在三個JSON檔案之間執行類似的匹配/連接--同樣是針對某個特定鍵的相同值,那么難度會有多大?
如果您能提供任何幫助,甚至只是提示如何解決和理解如何解決這個問題,我們將不勝感激!
第一個輸入檔案:
。第一個輸入檔案。JSON #1, Array c1 (collection 1)
{ "c1"/span>:
[]。
{ "c1id"。 1, "type"/span>。 "alpha" },
{ "c1id"。 2, "type"/span>。 "beta" }
]
}
第2個輸入檔案。JSON #2, Array c2 (collection 2)
{
"c2"/span>:
[]。
{ "c2id"。 1,"type"/span>。 "alpha","序列"。 "DDBB001"} ,
{ "c2id"/span>。 2,"type"/span>。 "beta","序列"。 "DDBB007"} ,
{ "c2id"/span>。 3,"type"/span>。 "alpha","序列"。 "DDTT005"} ,
{ "c2id"。 4,"type"/span>。 "beta","序列"。 "DDAA002"} ,
{ "c2id"。 5,"type"/span>。 "yotta","序列"。 "DDCC017"/span>}
]
}
預期輸出:
{"c1id"。 1,"type"/span>。 "alpha",/span>"c2id"。 1,"serial"。 "DDBB001"}
{"c1id"/span>。 1,"type"/span>。 "alpha",/span>"c2id"。 3,"serial"。 "DDTT005"/span>}
{"c1id"。 2,"type"/span>: "beta",/span>"c2id"。 2,"serial"。 "DDBB007"/span>}
{"c1id"/span>。 2,"type"/span>: "beta",/span>"c2id"。 4,"serial"。 "DDAA002"}
你會注意到,來自c2的型別 "yotta "并沒有包括在輸出中。這是預料之中的事。只有存在于c1并與c2匹配的 "型別 "才會出現在結果中。我想這是由這個匹配/連接練習所暗示的--我添加它只是為了明確--我希望它起作用。
uj5u.com熱心網友回復:
這里有一個使用INDEX和JOIN的例子:
jq --compact-output --slurpfile c1 c1.json '/span>
INDEX(
$c1[0].c1[];
.type.
) as $index | ?
JOIN(
$index;
.c2[];
.type;
逆轉|添加
)
' c2.json
INDEX的第一個引數需要產生一個專案流,這就是為什么我們應用[]從陣列中單獨獲取專案。第二個引數是選擇我們的索引鍵。
我們使用 JOIN 的四個引數版本。第一個引數是索引本身,第二個引數是要連接到索引的物件流,第三個引數是從物件流中選擇查找鍵,第四個引數是一個運算式,用于組裝連接物件。該運算式的輸入是一個雙項陣列流,每個陣列看起來像這樣:
[{"c2id"/span>:1,"type"/span>: "alpha","serial":"DDBB001";{"c1id": 1,"type":"alpha"}】
因為我們只是想結合所有物件的鍵和值,所以我們只是使用add,但我們首先reverse陣列,以很好地安排c1欄位在c2欄位之前。最終的結果就像你希望的那樣:
{"c1id"/span>。 1,"type"/span>。 "alpha",/span>"c2id"。 1,"serial"。 "DDBB001"}
{"c1id"/span>。 2,"type"/span>: "beta",/span>"c2id"。 2,"serial"。 "DDBB007"/span>}
{"c1id"/span>。 1,"type"/span>。 "alpha",/span>"c2id"。 3,"serial"。 "DDTT005"}
{"c1id"。 2,"type"/span>: "beta",/span>"c2id"。 4,"serial"。 "DDAA002"}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/320153.html
標籤:
