我正在调用一个 API,它返回一个包含对象数组的 JSON 响应。我想将对象存储在 bash 中的数组中,我想循环遍历它。
使用
jq -c
来利用紧凑的输出对我很有用:
json_response='{"value":[{"displayName":"1"},{"displayName":"2"},{"displayName":"3"}]}'
workspaces=$(echo $json_response | jq -c '.value.[]')
for workspace in ${workspaces[@]}; do
echo $workspace
done
这是输出:
{"displayName":"1"}
{"displayName":"2"}
{"displayName":"3"}
但是,如果
displayName
中有空格字符,则此方法不起作用:
json_response='{"value":[{"displayName":"1"},{"displayName":"2"},{"displayName":"3"},{"displayName":"Has Space"}]}'
workspaces=$(echo $json_response | jq -c '.value.[]')
for workspace in ${workspaces[@]}; do
echo $workspace
done
输出包含一个换行符,其中空格字符为:
{"displayName":"1"}
{"displayName":"2"}
{"displayName":"3"}
{"displayName":"Has
Space"}
即使有空格字符,如何仍然循环遍历对象?
""
) 所有可能包含空格的 bash 变量jq '.' <<< "$some_var"
echo $some_var | jq
readarray
创建 jq 输出的 bash 数组#!/bin/bash
json_response='{"value":[{"displayName":"1"},{"displayName":"2"},{"displayName":"3"},{"displayName":"Has Space"}]}'
readarray -t workspaces < <(jq -c '.value[]' <<< "$json_response")
for workspace in "${workspaces[@]}"; do
echo "--> $workspace <--"
done
在 bash 4.4.20 上给出以下内容
--> {"displayName":"1"} <--
--> {"displayName":"2"} <--
--> {"displayName":"3"} <--
--> {"displayName":"Has Space"} <--
关于我的你应该考虑在 jq 中循环工作评论;