此问题来自以下帖子:
jq -c -r ".[]" C:\setting-es.json | while read line; do echo '{"index":{}}'; echo $line; done > bulk.json
上面的jq shell命令抛出错误“ do循环中缺少语句主体”
我曾尝试更改语法,但仍然无法正常工作。我正在尝试编写一个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",}]}]
[此回复基于原始问题。]
不需要任何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}
这是在纠正了无效的JSON之后(即在删除了两个多余的逗号之后)对修订后的问题的答案。
仍然不需要shell循环。
jq -c '.[] | ({"index":{}}, [.])' input.json