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}