首页 > 解决方案 > JQ - 如何在字段值以另一个字段值开头的条件下选择字段

问题描述

假设我有一个 json 项目列表。每个项目包含字段ab。我很想得到一个 field 的值列表,a使得 fielda的值以 field 的值开头b。例如,

{
  "a": "1234",
  "b": "123"
},
{
  "a": "1234",
  "b": "12"
},
{
  "a": "foo",
  "b": "bar"
}

会导致

"1234",
"1234"

使用jq可以实现吗?

标签: jsonselectjq

解决方案


对于给定的输入数据,放入一个数组中,您可以使用startswith()如下函数。您的输入 JSON 本身不是很有效,需要将对象包含在数组[..]jq才能对其进行操作。

jq '.[] | .b as $data | select(.a | startswith($data) ).a'

jq游乐场

或者,如果您想将结果保存为 CSV 格式,请执行

jq --raw-output '[.[] | .b as $data | select(.a | startswith($data) ).a] | @csv'

推荐阅读