arrays - 如何在 Bash 中将字符串列表转换为 JSON 字符串数组?

标签 arrays json string bash jq

如何使用包含换行符的字符串列表在 Bash 中转换变量,如下所示

groups="group_1
group_2
group_3"

到 JSON 字符串数组:

{
    [ "group_1", "group_2", "group 3" ]
}

这可以用 jq 实现吗?

最佳答案

如果你的 jq 有 inputs 那么最简单的可能是使用它:

jq -ncR '[inputs]' <<< "$groups"
["group1","group2","group3"]

否则,这里有三种选择:

jq -c -n --arg groups "$groups" '$groups | split("\n")' 

echo -n "$groups" | jq -cRs 'split("\n")'

echo "$groups" | jq -R -s -c 'split("\n") | map(select(length>0))'

在任何情况下,数组都可以很容易地合并到 JSON 对象中,例如通过使用 | 扩展过滤器{组:.}

如果您真的想生成无效的 JSON,请考虑:

printf "%s" "$groups" | jq -Rrsc 'split("\n") | "{ \(.) }"'

输出:

{ ["group_1","group_2","group_3"] }

select(length>0)注意事项

考虑:

 jq -Rsc 'split("\n")' <<< $'a\nb'
 ["a","b",""]

包含select(length>0) 的原因是为了避免尾随“”。

如果 $groups 包含连续的换行符,并且保留空字符串很重要,那么您可能需要使用 [:-1],例如

jq -cRs 'split("\n")[:-1]' <<< "$groups"
["group1","group2","group3"]

如果您的 jq 不支持 [:-1],请显式显示 0:[0:-1]

关于arrays - 如何在 Bash 中将字符串列表转换为 JSON 字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44477810/

相关文章:

python - 统计字符串中长度为n(未给出)的子串出现x次

c - 为什么那些打印相同的结果?

ios - 如何使用 SwiftyJSON 解析字符串数组?

python - SQLAlchemy中,dict更新方法如何与ORM交互?

JavaScript 动态创建和填充数组

java - 如何在我的方法中返回数组?

c# - 如何使用带有身份验证 token 的 DataContractJsonSerializer

python - 根据 .CSV 文件中字典键的出现次数进行计数

arrays - 如何将数组拆分为 n 个相等或接近相等的数组?

java - 二维数组分配的性能