使用 jq 转换 json 对象,使用 base64 解码转换值

Transform json object with jq, transforming values with base64 decode

我正在使用如下所示的 json 对象:

{
    "someattrinbute": "somevalue",
    "data": {
        "SOMENAME": "...",
        "SOMEOTHERNAME": "...",
        ...
    }
}

其中 "data" 对象中的所有值都是 base64 编码的。我想生成相同的 json,但是 "data" 对象中的所有 属性 值都是 base64 解码的。

我相信这会涉及使用 "to_entries"、"from_entries" 和“@base64d”函数,但我看不出如何将它们打包在一起。

我将在 bash shell 脚本中执行此操作。

给定 example.json:

{
    "someattrinbute": "somevalue",
    "data": {
        "SOMENAME": "MTIz",
        "SOMEOTHERNAME": "NDU2"

    }
}

调用:

$ jq '.data[] |= @base64d' example.json

产生:

{
  "someattrinbute": "somevalue",
  "data": {
    "SOMENAME": "123",
    "SOMEOTHERNAME": "456"
  }
}

map_values 可用于将 @base64d 函数应用于对象的每个元素。

例如

jq '.data|map_values(@base64d)' example.json