【问题标题】:How do I find an attribute in a JSON file that contains any letter of the alphabet using jq?如何使用 jq 在包含任何字母的 JSON 文件中查找属性?
【发布时间】:2021-06-03 16:10:58
【问题描述】:

我有一个 JSON 文档,我正在查询一些数据。我需要遍历 ID 并找到任何包含字母的 ID。目前我有:

cat results.json | jq '.array|map(select( (.id|contains("a")) or (.id|contains("b")) ))' etc. etc.

如何在一个 contains() 函数中编写更高效的查询/正则表达式来执行此操作,例如类似:

cat results.json | jq '.array|map(select( (.id|contains("a-z")) ))' etc. etc.

谢谢!

【问题讨论】:

  • test 检查正则表达式。
  • 请发布results.json 文件的样本。

标签: json regex jq character-class


【解决方案1】:

要检查字符串是否包含字母,您可以使用test("[A-Za-z]")

还要考虑字符类,例如

test("\\p{Alpha}")
test("\\p{L}")

为了安全起见,您可能还需要选择或检查字符串,例如使用表格:

select( .id | strings | test(...) )

【讨论】:

  • 谢谢 - 用cat results.json | jq '.array|map(select( (.id|match("[A-Za-z]")) ))得到它设法得到它
【解决方案2】:

鉴于此输入:

[
  10,
  false,
  "foo",
  12,
  true,
  "bar",
  ":)",
  "99",
  "a99"
]

以下 JQ 过滤器:

map(select(strings|test("\\p{alpha}")))

将产生以下输出:

[
  "foo",
  "bar",
  "a99"
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2014-08-02
    • 2015-06-28
    • 1970-01-01
    相关资源
    最近更新 更多