我有一个简单的JSON数组:
$ sudo yum install r-3.3.3
我想转换为简单的JSON:
[
"smoke-tests",
"other-tests"
]
我已经尝试了几个jq示例,但似乎没有人做我想要的。
{"smoke-tests": true,
"other-tests": true
}
产生编译错误。
答案 0 :(得分:1)
$ s='["smoke-tests", "other-tests"]'
$ jq '[.[] | {(.): true}] | add' <<<"$s"
{
"smoke-tests": true,
"other-tests": true
}
分解其工作原理:.[] | {(.): true}
将每个项目转换为将值(作为关键字)映射到true
的字典。围绕[ ]
的意思是我们生成这样的对象列表;将其发送到add
将它们组合成一个对象。
答案 1 :(得分:1)
如果您喜欢reduce
的效率但又不想明确使用reduce
:
. as $in | {} | .[$in[]] = true
答案 2 :(得分:1)
以下是使用add的解决方案。它接近Charles的解决方案,但是当与返回多个结果的表达式一起使用时,使用Object construction的行为隐式返回多个对象。
[{(.[]):true}]|add
答案 3 :(得分:0)
使用reduce()
功能:
jq 'reduce .[] as $k ({}; .[$k]=true)' file
输出:
{
"smoke-tests": true,
"other-tests": true
}