JMESPath-将原始字符串解析为对象

mix*_*xja 7 jmespath

我有一个使用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
}
Run Code Online (Sandbox Code Playgroud)

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

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

bos*_*972 -3

如果您仅使用 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}})`)
Run Code Online (Sandbox Code Playgroud)

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