如何在JQ中有条件地将字符串值更改为数字?

知识共享系统

我正在从AWS的SecretsManager中获取一个秘密,并使用生成的JSON构建参数JSON文件,该文件可以将此参数传递给云形成引擎。不幸的是,SecretsManager将所有值存储为字符串,因此当我尝试将这些值传递到我的云形成模板时,它将失败,因为它传递的是字符串而不是数字,并且某些云形成参数需要为数字(例如,不是字符串) 。

在下面的示例中,我想告诉JQ,“ HEALTH_CHECK_UNHEALTHY_THRESHOLD_COUNT ”和“ AUTOSCALING_MAX_CAPACITY ”是数字。因此,我在键之前加上“ NUMBER ::”。

这有两个目的。首先,它告诉查看此秘密的人它将被转换为数字,其次,它将告诉JQ将字符串值“ 2”转换为2。这需要扩展,以便我可以拥有1..n键需要在JSON中进行转换。

考虑以下JSON:

{
  "NUMBER::AUTOSCALING_MAX_CAPACITY": "12",
  "SERVICE_PLATFORM_VERSION": "1.3.0",
  "HEALTH_CHECK_PROTOCOL": "HTTPS",
  "NUMBER::HEALTH_CHECK_UNHEALTHY_THRESHOLD_COUNT": "2"
}

这是我想对JQ进行的操作:

  1. JQ将“按原样”复制JSON中大多数元素的键/值对。如果没有“ NUMBER ::”前缀,它们将被复制为“原样”。

  2. 但是,如果键的前缀为“ NUMBER ::”,则希望发生以下情况:

    一种。JQ将从键名中删除“ NUMBER ::”前缀。

    b。JQ会将值从字符串转换为数字。

最终结果是一个如下所示的JSON:

{
  "AUTOSCALING_MAX_CAPACITY": 12,
  "SERVICE_PLATFORM_VERSION": "1.3.0",
  "HEALTH_CHECK_PROTOCOL": "HTTPS",
  "HEALTH_CHECK_UNHEALTHY_THRESHOLD_COUNT": 2
}

我尝试过的

我尝试使用Map来完成此操作,但效果有限。在此示例中,我主要是作为测试来寻找特定领域。我不需要按名称调出特定的键,而只是使用以“ NUMBER ::”开头的任何键进行转换。

注意:以下示例中的SECRET_STRING变量包含源JSON。

 echo $SECRET_STRING | jq 'to_entries | map(if .key == "NUMBER::AUTOSCALING_MAX_CAPACITY"  then . + {"value":.value}  else . end ) | from_entries'**

我还尝试在整个JSON中使用“ tonumber”。JQ将检查所有值,并查看是否可以将它们转换为数字。问题是,当它按下“ SERVICE_PLATFORM_VERSION”键时会失败,因为它检测到“ 1.3.0”为数字,并试图使该数字成为伪造。

Example: echo $SECRET_STRING | jq -r '.[] | tonumber'

回顾一下,我想使用JQ通过在键名中使用前缀“ NUMBER ::”将JSON字符串值转换为数字。

注意:尝试从Systems Manager参数存储中提取条目时,此问题不存在,因为AWS允许您将“解决”条目用作字符串或数字。SecretsManager中不存在相同的功能。我还想使用SecretsManager提供约30个或更多配置项的列表,以设置我的堆栈。使用参数存储,您必须将每个配置项设置为单独的条目,这是维护的噩梦。

oguz ismail

用键开头选择每个条目,NUMBER::并进行更新以删除该前缀并将值转换为数字。

with_entries(
  select(.key | startswith("NUMBER::")) |= (
    (.key   |= ltrimstr("NUMBER::")) |
    (.value |= tonumber)
  )
)

在线演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有条件地将JSF组件添加到翻译字符串中

来自分类Dev

如何在有条件的js中有条件地应用标题

来自分类Dev

有条件地将查询字符串附加到有角度的href

来自分类Dev

R有条件地更改字符串

来自分类Dev

在Python中有条件地拆分字符串

来自分类Dev

在Python中有条件地显示字符串

来自分类Dev

ansbile:有条件地拆分字符串

来自分类Dev

从字符串中有条件地提取子字符串

来自分类Dev

有条件地将字符串粘贴在一起

来自分类Dev

如何在Angular中有条件地渲染?

来自分类Dev

如何在WPF中有条件地更改按钮前景颜色?

来自分类Dev

如何在React中有条件地将布局应用于组件

来自分类Dev

有条件地将JSF组件添加到翻译字符串中

来自分类Dev

有条件地设置字符串

来自分类Dev

使用Regex有条件地更改字符串的特定部分

来自分类Dev

如何使用AngularJS在HTML文件中有条件地插入字符串?

来自分类Dev

有条件地将字符串转换为Python中的字典

来自分类Dev

R有条件地更改字符串

来自分类Dev

如何在Excel中有条件地匹配

来自分类Dev

有条件地将字母添加到字符串

来自分类Dev

如何在Excel中有条件地VLOOKUP?

来自分类Dev

如何在Excel中有条件地替换字符

来自分类Dev

如何仅在Excel中有条件地格式化子字符串

来自分类Dev

有条件地连接字符串

来自分类Dev

CouchDB:有条件地将 Map/Reduce 输出中的值更改为负数

来自分类Dev

有条件地拆分大字符串

来自分类Dev

如何在 C++ 中有条件地设置 C 样式字符串?

来自分类Dev

有条件地将字符串和数字数组组合为对象数组

来自分类Dev

在php中有条件地分解字符串