Json 将.jq筛选器结果包含到单个数组中

Json 将.jq筛选器结果包含到单个数组中,json,jq,Json,Jq,使用以下输入示例: {"contacts":{"orgid":"1","email":"janedoe@aol.com","first_name":"Jane","last_name":"Doe","phone":"4045551212","tags":["tag1","tag2"],"fields":[{"id":"2","value":"IB4220"},{"id":"3","value":"1994-05-18"},{"id":"12","value":"CONSULTANT"},{"id

使用以下输入示例:

{"contacts":{"orgid":"1","email":"janedoe@aol.com","first_name":"Jane","last_name":"Doe","phone":"4045551212","tags":["tag1","tag2"],"fields":[{"id":"2","value":"IB4220"},{"id":"3","value":"1994-05-18"},{"id":"12","value":"CONSULTANT"},{"id":"13","value":"janedoe@aol.com"},{"id":"6","value":"111 Main Blvd"},{"id":"7","value":"Babylon"},{"id":"8","value":"NY"},{"id":"9","value":"11702-1522"},{"id":"10","value":"US"},{"id":"11","value":""},{"id":"5","value":"http://www.something.com/janedoe"}]}}
{"contacts":{"orgid":"1","email":"janedoe@aol.com","first_name":"Jane","last_name":"Doe","phone":"4045551212","tags":["tag1","tag2"],"fields":[{"id":"2","value":"IB4220"},{"id":"3","value":"1994-05-18"},{"id":"12","value":"CONSULTANT"},{"id":"13","value":"janedoe@aol.com"},{"id":"6","value":"111 Main Blvd"},{"id":"7","value":"Babylon"},{"id":"8","value":"NY"},{"id":"9","value":"11702-1522"},{"id":"10","value":"US"},{"id":"11","value":""},{"id":"5","value":"http://www.something.com/janedoe"}]}}
我试图将筛选结果包含在单个“联系人”数组中

这是我的jq过滤器,我正在使用,但没有用

jq --slurp '.[] | .[].fields[].id |= tonumber | .[].orgid |= tonumber | {contacts: [.[]| {orgid: .["orgid"],email: .["email"],first_name: .["first_name"],last_name: .["last_name"],phone: .["phone"],tags:[ .["tags"]],fields}]}'
它将每个输入行包装在一个“contacts”数组中,如下所示

{
  "contacts": [
    {
      "orgid": 1,
      "email": "janedoe@aol.com",
      "first_name": "Jane",
      "last_name": "Doe",
      "phone": "4045551212",
      "tags": [
        [
          "tag1",
          "tag2"
        ]
      ],
      "fields": [
        {
          "id": 2,
          "value": "IB4220"
        },
        {
          "id": 3,
          "value": "1994-05-18"
        },
        {
          "id": 12,
          "value": "CONSULTANT"
        },
        {
          "id": 13,
          "value": "janedoe@aol.com"
        },
        {
          "id": 6,
          "value": "111 Main Blvd"
        },
        {
          "id": 7,
          "value": "Babylon"
        },
        {
          "id": 8,
          "value": "NY"
        },
        {
          "id": 9,
          "value": "11702-1522"
        },
        {
          "id": 10,
          "value": "US"
        },
        {
          "id": 11,
          "value": ""
        },
        {
          "id": 5,
          "value": "http://www.something.com/janedoe"
        }
      ]
    }
  ]
}
{
  "contacts": [
    {
      "orgid": 1,
      "email": "janedoe@aol.com",
      "first_name": "Jane",
      "last_name": "Doe",
      "phone": "4045551212",
      "tags": [
        [
          "tag1",
          "tag2"
        ]
      ],
      "fields": [
        {
          "id": 2,
          "value": "IB4220"
        },
        {
          "id": 3,
          "value": "1994-05-18"
        },
        {
          "id": 12,
          "value": "CONSULTANT"
        },
        {
          "id": 13,
          "value": "janedoe@aol.com"
        },
        {
          "id": 6,
          "value": "111 Main Blvd"
        },
        {
          "id": 7,
          "value": "Babylon"
        },
        {
          "id": 8,
          "value": "NY"
        },
        {
          "id": 9,
          "value": "11702-1522"
        },
        {
          "id": 10,
          "value": "US"
        },
        {
          "id": 11,
          "value": ""
        },
        {
          "id": 5,
          "value": "http://www.something.com/janedoe"
        }
      ]
    }
  ]
}
。。。但我需要这样(1个“联系人”数组,包含所有过滤的输入行)

要获得如图所示的“预期”输出,可以将以下jq过滤器与-s选项结合使用:

{ contacts: [.[] | [.contacts]] | add }
但是,jq程序表明您还需要将一些字符串转换为数字。这就是你建议的q.e.d.,因此作为练习,但下面显示了使用替代方法的完整解决方案

避免——咕哝 一般来说,最好将-n与
输入一起使用

[ [inputs.contacts 
   | .fields[].id |= tonumber
   | .orgid |= tonumber] ]
| {contacts: add}


我喜欢最小的方法。当我尝试它时,我只得到第二行输出。即使添加第3行和第4行输入数据,也只有第2行返回。想法?假设您使用的是“避免--slurp”解决方案,我能想到的唯一解释是(a)您忘记了-n命令行选项;(b)您编写了
input
而不是
inputs
。您是对的,我在删除-s部分时省略了-n部分。谢谢你的帮助。
[ [inputs.contacts 
   | .fields[].id |= tonumber
   | .orgid |= tonumber] ]
| {contacts: add}