jq:如何从一个对象数组中获取带有json对象值的数组数组

zaq34kh6  于 2023-10-21  发布在  其他
关注(0)|答案(2)|浏览(138)

像这样输入json

[
  {
    "k1": "o1k1",
    "k2": "o1k2",
    "k_opt1": "o1k_xxx"
  },
  {
    "k1": "o2k1",
    "k2": "o2k2",
    "k_opt2": "o2k_yyy"
  }
]

我想得到一个带有对象值的数组,所以:

[
  [
    "o1k1",
    "o1k2",
    "o1k_xxx"
  ],
  [
    "o2k1",
    "o2k2",
    "o2k_yyy"
  ]
]

我尝试了.[] | to_entries[].value,但它会吃掉单个数组,只生成:

"o1k1",
  "o1k2",
  "o1k_xxx",
  "o2k1",
  "o2k2",
  "o2k_yyy"

有什么建议吗

yb3bgrhw

yb3bgrhw1#

双嵌套map(…)[.[]](甚至.[] |= …在数组上,而不是对象上)。所有这些都是你想要的:

jq 'map(map(.))'     # nesting map(…) and map(…)
jq 'map([.[]])'      # nesting map(…) and [.[]]
jq '[.[] | [.[]]]'   # nesting [.[]] and [.[]]
jq '[.[] | map(.)]'  # nesting [.[]] and map(…)

jq '.[] |= map(.)'   # nesting .[] |= … and map(…)
jq '.[] |= [.[]]'    # nesting .[] |= … and [.[]]

Demo

zmeyuzjn

zmeyuzjn2#

只需循环遍历数组并将对象替换为Object.value(),这将创建一个包含对象值的数组。

编辑:我的坏不知何故,我得到了这个问题,并认为这是关于JS。我还是会留下这个,虽然,可能会帮助别人x)

const data = [
  {
    "k1": "o1k1",
    "k2": "o1k2",
    "k_opt1": "o1k_xxx"
  },
  {
    "k1": "o2k1",
    "k2": "o2k2",
    "k_opt2": "o2k_yyy"
  }
]

function getKeys(arr) {
  arr.forEach((dataset, i) => {
    arr[i] = Object.values(dataset)
  })
  return arr
}

console.log(getKeys(data))

相关问题