循环中的JSON键和bash变量

循环中的JSON键和bash变量,json,bash,jq,Json,Bash,Jq,我需要捕获他们使用的所有空间/聊天室,并确保新帐户连接到所有这些空间。我可以使用curl调用服务sparkapi并获取空间列表,然后使用jq对其进行处理,使其成为一种值得尊敬的格式。我最终得到的是一系列50到900个(取决于使用情况)JSON对象(每个空间/房间一个) 我想在这里做的是创建一个快速而肮脏的脚本,然后在循环中处理这个JSON文件,将键作为变量拉入 (items.id = $id, items.title = $title, etc.) 通过文件中的相关值,我可以执行一些基本的“

我需要捕获他们使用的所有空间/聊天室,并确保新帐户连接到所有这些空间。我可以使用
curl
调用服务sparkapi并获取空间列表,然后使用
jq
对其进行处理,使其成为一种值得尊敬的格式。我最终得到的是一系列50到900个(取决于使用情况)JSON对象(每个空间/房间一个)

我想在这里做的是创建一个快速而肮脏的脚本,然后在循环中处理这个JSON文件,将键作为变量拉入

(items.id = $id, items.title = $title, etc.) 
通过文件中的相关值,我可以执行一些基本的“if-then-else”计算(检查
isLocked
是否为
true
false
),然后使用其他变量执行一些其他API调用。出于某种原因,可能是我对
jq
不熟悉,我无法使循环和变量提取正常工作。

您不需要在JSON对象上循环,使用
jq
,您可以在每个对象内插入变量,并根据需要执行逻辑。由于JSON中的字段之间可能包含空格,因此可以使用自定义分隔符
|
将其拆分,并在
bash
循环的
read
命令中使用该分隔符

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提供的进程替换技术。在同一父shell中运行,并在

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
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)