[英]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.