使用JQ将值添加到键数组

时间:2017-09-22 19:59:35

标签: json object key jq

我有一个简单的JSON数组:

$ sudo yum install r-3.3.3

我想转换为简单的JSON:

[
"smoke-tests",
"other-tests"
]

我已经尝试了几个jq示例,但似乎没有人做我想要的。

{"smoke-tests": true, "other-tests": true } 产生编译错误。

4 个答案:

答案 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
}