11

我有一个使用 JMESPath 解析的对象,其中属性的值是编码为字符串的 JSON 对象。我希望能够将该字符串属性解析为 JSON 对象并仅使用 JMESPath 使用它(我知道我可以使用 JSON 编码器解析该值)。

这是对象:

{
    "ARN": "arn:aws:secretsmanager:us-east-1:xxxxx:secret:todobackend/db/credentials-AP57Kn",
    "Name": "todobackend/db/credentials",
    "VersionId": "c95fae54-e7b4-4c7f-80d6-2c5649f86570",
    "SecretString": "{\"MYSQL_USER\":\"todobackend\",\"MYSQL_PASSWORD\":\"password\"}",
    "VersionStages": [
        "AWSCURRENT"
    ],
    "CreatedDate": 1523276277.046
}

所以我想将SecretString属性解析为 JSON 对象。

关于这是否可能的任何想法?

4

3 回答 3

4

jq 会拯救你:

aws secretsmanager get-secret-value --secret-id todobackend/db/credentials-AP57K | jq -r '.SecretString|fromjson|.MYSQL_USER,.MYSQL_PASSWORD'
于 2020-01-17T20:41:24.057 回答
0

在这方面我也没有运气。我不得不改用 python,或者将秘密存储在 PLAIN TEXT (单值)中。

import json
import boto3

scm = boto3.client('secretsmanager', region_name='us-east-1')
dct = json.loads(scm.get_secret_value(SecretId="stg/brand/credentials")['SecretString'])

print(dct["MYSQL_USER"])
print(dct["MYSQL_PASSWORD"])
于 2022-02-25T14:20:34.270 回答
-2

如果您仅使用 JMESPath,您可以尝试通过以下请求手动完成:

merge(@,{SecretString: {MYSQL_USER: 'todobackend', MYSQL_PASSWORD: 'password'}})

它运作良好。但是如果你可以用其他语言来做它,包括像js这样的jmespath,你可以这样做:

let jsonString = JSON.stringify(JSON.parse("{\"MYSQL_USER\":\"todobackend\",\"MYSQL_PASSWORD\":\"password\"}")).split('"').join("'").replace("{'","{").split(",'").join(",").split("':").join(":");
let mainObject = {
   "ARN": "arn:aws:secretsmanager:us-east-1:xxxxx:secret:todobackend/db/credentials-AP57Kn",
   "Name": "todobackend/db/credentials",
   "VersionId": "c95fae54-e7b4-4c7f-80d6-2c5649f86570",
   "SecretString": "{\"MYSQL_USER\":\"todobackend\",\"MYSQL_PASSWORD\":\"password\"}",
   "VersionStages": [
       "AWSCURRENT"
   ],
   "CreatedDate": 1523276277.046
}
var data = jmespath.search(mainObject, `merge(@,{SecretString:${jsonString}})`)

拆分/连接允许代码可用于像这样的另一个字符串

于 2019-07-26T08:51:14.257 回答