【问题标题】:String substitution on array of strings字符串数组上的字符串替换
【发布时间】:2021-08-18 00:19:36
【问题描述】:

我正在尝试从字符串数组中删除一个子字符串;该数组是从地图中作为键集获得的。一些输入数据示例:

{
  "appOneVersion": "1.0",
  "appTwoVersion": "1.0",
  "appThreeVersion": "1.0"
}

首先我提取密钥集并制作小写字母:

 $ jq -r 'with_entries( .key |= ascii_downcase) | keys' example.json
[
  "apponeversion",
  "appthreeversion",
  "apptwoversion"
]

然后我尝试用sub("version$"; "") 剥离每个元素的version 部分,但是我不太了解如何让它遍历数组而不是sub 尝试对数组进行操作一个整体:

$ jq -r 'with_entries( .key |= ascii_downcase) | keys | sub("version$"; "")' example.json
jq: error (at example.json:5): array (["apponever...) cannot be matched, as it is not a string

【问题讨论】:

  • 我正在尝试获取所有密钥;下面的@peak 提供了一些适合我的选项。

标签: arrays json jq edit


【解决方案1】:

看起来map 可以解决问题,您也可以考虑keys_unsorted

with_entries( .key |= ascii_downcase )
| keys_unsorted | map(sub("version$"; ""))

当然,还有其他方法....

如果你想保留原来的结构:

with_entries( .key |= (ascii_downcase | sub("version$";"")))

【讨论】:

  • 谢谢,原始结构并不重要,所以两者都可以。与jq 一样,可能还有其他方法,但这对我来说看起来不错。
猜你喜欢
  • 2014-03-21
  • 2012-04-26
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多