我需要捕获他们使用的所有空间/聊天室,并确保新帐户连接到所有这些空间。我可以使用curl
来调用服务Spark API并获取空格列表,并使用jq
对其进行处理以将其设置为适当的格式。我最终得到的是一系列50到900个(取决于使用情况)JSON对象(每个空间/房间一个)。
{
"items":[
{
"id":"Y2lzY29zcGFyazovL3VzL1JPT00vNGY0Y2Q5NDAtN2JkZi0xMWU4LThiMjMtMTU0YzAyNTI0YzBh",
"title":"(CISCO INTERNAL): FTB - CMS Opportunity",
"type":"group",
"isLocked":false,
"lastActivity":"2018-06-29T21:05:55.994Z",
"creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS9kMWI3MDRhNS05ZmU0LTQ3MTYtOGY2Zi02OGEyNjVjZGQ5YzM",
"created":"2018-06-29T20:59:27.316Z"
},
{
"id":"Y2lzY29zcGFyazovL3VzL1JPT00vMTQxODk5MTAtN2JiYS0xMWU4LThiOWUtMjMwOWM4Y2NiYWMz",
"title":"USU Cisco Webex EDU Program",
"type":"group",
"isLocked":true,
"lastActivity":"2018-06-29T19:46:14.993Z",
"creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS8wZThjMzg3Yy0zNzc5LTRlYTEtYmY2My1mNzZmMDJkYzVjM2M",
"created":"2018-06-29T16:32:56.609Z"
},
{
"id":"Y2lzY29zcGFyazovL3VzL1JPT00vZjYyNDg1NjAtNzg5Yy0xMWU4LTlmYzItNGZhYzQwZWE4MTA4",
"title":"Darren TeamSpace Space",
"type":"group",
"isLocked":false,
"lastActivity":"2018-06-26T15:00:03.332Z",
"teamId":"Y2lzY29zcGFyazovL3VzL1RFQU0vZWQ5Mzc1ZDAtZjE1MC0xMWU1LWFjNWUtNTNiMzQxMDkxMTU1",
"creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS83YTBkMTJiMS1lODMxLTRkNmItYTAzMS0xMDU4Y2UwOTAwZTU",
"created":"2018-06-25T17:26:57.561Z"
}
]
}
我想在这里创建一个快速且肮脏的脚本,然后可以循环处理该JSON文件,将键作为变量拉入
(items.id = $id, items.title = $title, etc.)
具有文件中的关联值,因此我可以执行一些基本的“ if then else”评估(检查isLocked
是true
还是false
),然后执行其他一些API使用其他变量调用。由于某些原因,可能是由于我对jq
缺乏了解,我无法使循环和变量提取正常工作。
答案 0 :(得分:4)
您不需要在这里使用jq
在JSON对象上循环 ,您只需在每个对象中插入变量并根据需要执行逻辑即可。由于JSON中的字段可以使用自定义定界符|
来分隔它们之间的空格,并在read
循环的bash
命令中使用它们,所以使用
jq --raw-output '.items[] | "\(.id)|\(.title)|\(.isLocked)"' json |
while IFS="|" read -r id title flag; do
printf '%s|%s|%s\n' "$id" "$title" "$flag"
done
现在在shell上下文中对变量id
,title
和flag
进行处理。如果您想使用更多变量,只需将其添加到原始jq
过滤器中即可。
如果您不希望循环在子shell中运行,请使用bash
shell提供的进程替换技术。这样做是在同一父外壳程序中运行,并使<(cmd)
下的命令输出就像出现在临时文件中一样
while IFS="|" read -r id title flag; do
printf '%s|%s|%s\n' "$id" "$title" "$flag"
done< <(jq --raw-output '.items[] | "\(.id)|\(.title)|\(.isLocked)"' json)