尝试使用JQ处理json数据:Elasticsearch批量索引api

问题描述 投票:0回答:2

此问题来自以下帖子:

Elasticsearch Bulk JSON Data

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",}]}]


json elasticsearch jq
2个回答
0
投票

[此回复基于原始问题。]

不需要任何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}

0
投票

这是在纠正了无效的JSON之后(即在删除了两个多余的逗号之后)对修订后的问题的答案。

仍然不需要shell循环。

jq -c '.[] | ({"index":{}}, [.])'  input.json
© www.soinside.com 2019 - 2024. All rights reserved.