jq 使用输入将流减少为所有叶值的数组

发布于 2025-01-12 03:01:15 字数 838 浏览 0 评论 0原文

我想接收流式 json 输入并将它们减少为包含叶值的数组。

演示:https://jqplay.org/s/cZxLguJFxv

请考虑

过滤器:

try reduce range(30) as $i ( []; (.+[until(length==2;input)[1]] // error(.))  )
catch empty

输入:

[
  [
    0,
    0,
    "a"
  ],
  null
]
[
  [
    0,
    0,
    "a"
  ]
]
[
  [
    0,
    1,
    "b"
  ],
  null
]
[
  [
    0,
    1,
    "b"
  ]
]
[
  [
    0,
    1
  ]
]
[
  [
    1
  ],
  0
]
...

output:
empty

我期望输出:[null, null, 0, ...] 但我却得到了空。

我告诉 reduce 迭代 30 次,但输入的大小小于该值。我期望它会清空那些长度不是 2 的输入,并生成一个包含所有叶值的数组。

我不知道当不再有长度为 2 的 input 且存在 reduce 迭代时,这将如何表现。

我想知道为什么我的过滤器返回空。我做错了什么?谢谢!

I want to receive streamed json inputs and reduce them to an array containing the leaf values.

Demo: https://jqplay.org/s/cZxLguJFxv

Please consider

filter:

try reduce range(30) as $i ( []; (.+[until(length==2;input)[1]] // error(.))  )
catch empty

input:

[
  [
    0,
    0,
    "a"
  ],
  null
]
[
  [
    0,
    0,
    "a"
  ]
]
[
  [
    0,
    1,
    "b"
  ],
  null
]
[
  [
    0,
    1,
    "b"
  ]
]
[
  [
    0,
    1
  ]
]
[
  [
    1
  ],
  0
]
...

output:
empty

I expect the output: [null, null, 0, ...] but I get empty instead.

I told reduce to iterate 30 times but the size of inputs is less than that. I'm expecting it will empty those input of length other than 2 and produce an array containing all leaf values.

I don't know how this will behave when there is no more input with length 2 left and there are iterations of reduce left.

I want to know why my filter returns empty. What am I doing wrong? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

丑疤怪 2025-01-19 03:01:15

这些过滤器应该满足您的要求:

jq -n 'reduce inputs as $in ([]; if $in | has(1) then . + [$in[1]] else . end)'

演示

jq -n '[inputs | select(has(1))[1]]'

演示

These filters should do what you want:

jq -n 'reduce inputs as $in ([]; if $in | has(1) then . + [$in[1]] else . end)'

Demo

jq -n '[inputs | select(has(1))[1]]'

Demo

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文