我試圖從 Linux 控制臺決議來自 woocommerce 的資料。只需要帶數量的運輸資訊和專案名稱。
我發出 curl 請求wp-json/wc/v2/orders/ORDER_ID
然后
jq '{order_id:.id,ship_info:.shipping,items: (.line_items[] | {name , quantity} ) }'
如果訂單包含兩個專案, jq將回傳兩個物件
示例:
{
"order_id": 1234,
"ship_info": {
"first_name": "Sam",
"last_name": "Fisher",
"company": "",
"address_1": "24 Mega Drive",
"address_2": "",
"city": "Eglinton",
"state": "WA",
"postcode": "6032",
"country": "AU",
"phone": ""
},
"items": {
"name": "Black T-shirt",
"quantity": 1
}
}
{
"order_id": 1234,
"ship_info": {
"first_name": "Sam",
"last_name": "Fisher",
"company": "",
"address_1": "24 Mega Drive",
"address_2": "",
"city": "Eglinton",
"state": "WA",
"postcode": "6032",
"country": "AU",
"phone": ""
},
"items": {
"name": "White T-shirt",
"quantity": 1
}
}
我想合并專案并使用專案的名稱作為鍵和專案的數量作為值。請建議如何獲得這樣的輸出
{
"order_id": 1234,
"ship_info": {
"first_name": "Sam",
"last_name": "Fisher",
"company": "",
"address_1": "24 Mega Drive",
"address_2": "",
"city": "Eglinton",
"state": "WA",
"postcode": "6032",
"country": "AU",
"phone": ""
},
"items": {
"White T-shirt": "1",
"Black T-shirt": "1"
}
}
uj5u.com熱心網友回復:
使用您當前的jq查詢,您正在迭代生成的物件內的專案。這就是您每件物品收到一個物品的原因。與其在之后合并它們,不如一開始就不要將它們分開。
如果您將查詢從
jq '{
order_id: .id,
ship_info: .shipping,
items: (.line_items[] | {name, quantity})
}'
只是
jq '{
order_id: .id,
ship_info: .shipping,
items: .line_items
}'
您可能已經看到它.line_items實際上是一個陣列。
要根據您所需的輸出對其進行轉換,請將該行更改為以下內容之一。它們都應該產生相同的結果。
items: (.line_items | map({(.name): .quantity}) | add)
items: (INDEX(.line_items[]; .name) | map_values(.quantity))
items: (reduce .line_items[] as $i ({}; .[$i.name] = .quantity))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/436498.html
標籤:json 重击 解析 woocommerce json解析器
