[英]Attempting to use JQ to process json data : Elasticsearch bulk index api
這個問題來自以下帖子:
jq -c -r ".[]" C:\setting-es.json | while read line; do echo '{"index":{}}'; echo $line; done > bulk.json
上面的 jq shell 命令拋出錯誤“Missing statement body in do loop”
我試圖改變語法,但它仍然不起作用。 我正在嘗試編寫 shell 腳本來為 elasticsearch 的批量 api 轉換以下數據:
[{
"codeId": "111",
"association": [{
"associationId": 123,
"businessUnitsAssociationId": 1,
"financialBusinessUnits": "DCS",
"businessApprovalLimit": [{
"businessApprovalLimitApprovalLimitId": 1,
"itemMinAmount": "0.00",
"itemMaxAmount": "0.00"
}, {
"businessApprovalLimitApprovalLimitId": 2,
"itemMinAmount": "0.00",
"itemMaxAmount": "0.00"
}, {
"businessApprovalLimitApprovalLimitId": 3,
"itemMinAmount": "0.00",
"itemMaxAmount": "0.00"
}]
}]
}]
我正在嘗試將其轉換為以下內容:
{"index":{}}
[{"codeId":"111","association":[{"associationId":123,"businessUnitsAssociationId":1,"financialBusinessUnits":"DCS","businessApprovalLimit":[{"businessApprovalLimitApprovalLimitId":1,"itemMinAmount":"0.00","itemMaxAmount":"0.00",},{"businessApprovalLimitApprovalLimitId":2,"itemMinAmount":"0.00","itemMaxAmount":"0.00",},{"businessApprovalLimitApprovalLimitId":3,"itemMinAmount":"0.00","itemMaxAmount":"0.00",}]}]
這是修改后問題的答案,在更正無效的 JSON 之后(即,在刪除兩個多余的逗號之后)。
仍然不需要 shell 循環。
在 bash 或類似 bash 的提示下:
jq -c '.[] | ({"index":{}}, [.])' input.json
在 Powershell 提示符下,將 jq 程序放入文件中並使用-f FILENAME
選項調用 jq 可能更容易。
[此回復基於原始問題。]
不需要任何 shell 循環:
$ jq -c '{"index":{}},.' input.json
{"index":{}}
{"str field":"some string","int field":12345,"bool field":true}
{"index":{}}
{"str field":"another string","int field":42,"bool field":false}
{"index":{}}
{"str field":"random string","int field":3856452,"bool field":true}
{"index":{}}
{"str field":"string value","int field":11111,"bool field":false}
{"index":{}}
{"str field":"last string","int field":54321,"bool field":true}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.