arrays - 如何将jq中的对象序列组合成一个对象?

标签 arrays json addition jq fileslurp

我想转换对象流:

{
  "a": "green",
  "b": "white"
}
{
  "a": "red",
  "c": "purple"
}

合二为一:

{
  "a": "red",
  "b": "white",
  "c": "purple"
}

另外,如何将相同的序列包装到一个数组中?

[
    {
      "a": "green",
      "b": "white"
    },
    {
      "a": "red",
      "c": "purple"
    }
]

遗憾的是,该手册严重缺乏全面性,谷歌搜索也找不到答案。

最佳答案

如果你的输入是一个对象流,那么除非你的 jq 有 inputs,否则这些对象必须是“slurped”,例如使用 -s 命令行选项,以组合它们。

因此,在输入流中组合对象的一种方法是使用:

jq -s add

对于第二个问题,创建一个数组:

jq -s .

当然还有其他选择,但这些都很简单,不需要最新版本的 jq。对于 jq 1.5 及更高版本,您可以使用“输入”,例如jq -n '[输入]'

高效解决方案

对于第一个问题(reduction),而不是 slurping(无论是通过 -s 选项,还是使用 [inputs]),使用 reduce 会更有效> 带有 inputs 和 -n 命令行选项。例如,将对象流组合成一个对象:

jq -n 'reduce inputs as $in (null; . + $in)'

等效地,没有 --null-input:

jq 'reduce inputs as $in (.; . + $in)

关于arrays - 如何将jq中的对象序列组合成一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477547/

相关文章:

iphone - 保存用户默认值时出现随机 BAD ACCESS

c++ - 尽管类型足够大,整数还是溢出?

python - Pandas:查找空/缺失值并将其添加到 DataFrame 中

javascript - 在逗号和句号后添加空格,但如果它是小数分隔符则不添加空格

带有字符数组的 C++ & 运算符

c - 在函数参数中传递的数组是否被视为按引用调用?

Javascript/Lodash/Redux - 从对象返回具有特定 id 的对象

json - postman :通过表单数据的嵌套 JSON 的 POST 请求不起作用(而通过原始数据则正常)

java - 如何以编程方式使用 JSON 文件中的数据填充 Firebase?

javascript - 从数组中拆分具有多个分隔符的字符串