Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

235
Visualizações
¿Cómo JSON.parse() json que contiene json anidado como una cadena en una propiedad?

Estoy tratando de analizar la respuesta de aws secretsmanager

La salida se parece a:

 { "ARN": "arn:aws:secretsmanager:us-west-2:0000:secret:token-0000", "Name": "token", "VersionId": "0000-0000-0000-0000-0000", "SecretString": "{\"TOKEN\":\"000000000000\"}", "VersionStages": ["AWSCURRENT"], "CreatedDate": "0000" }

Al intentar analizar esta cadena con JSON.parse() , intenta analizar el valor de la cadena en SecretString que tiene comillas de escape.

Hubiera esperado necesitar JSON.parse la respuesta en dos pasos, sin embargo, esto no funciona.

 #!/bin/bash TOKEN=$(node -e "\ const result = JSON.parse('$(aws secretsmanager get-secret-value --secret-id $ARN)'); \ const token = JSON.parse(result.SecretString); \ console.log(token); \ ") echo $TOKEN

¿Cómo puedo evitar que la función JSON.parse intente analizar el valor de cadena de SecretString ? Alternativamente, ¿hay una mejor manera de obtener el valor?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

JSON.parse no intenta analizar las cadenas codificadas en JSON contenidas en el objeto analizado, por lo que no creo que esto sea lo que está causando su problema. Es más probable que tenga que ver con el manejo de las comillas por parte del shell.

Creo que una mejor manera de hacer esto sería hacer que su secuencia de comandos de Node llame a la CLI de aws usando child_process.execFile , en lugar de que el shell llame a aws y pase el resultado a Node.

Si necesita acceder a la variable ARN desde Node, puede hacerlo usando process.env.ARN .

Aquí hay un código que debería hacer el truco:

 async function main() { const child_process = require('child_process'); const util = require('util'); const execFile = util.promisify(child_process.execFile); const json = (await execFile('aws', ['secretsmanager', 'get-secret-value', '--secret-id', process.env.ARN])).stdout; const result = JSON.parse(json); const token = result.SecretString; console.log(token); } main();

Si va a necesitar hacer más de este tipo de cosas, podría valer la pena mirar el SDK de AWS para NodeJS . Incluso con execFile , aún existen algunos inconvenientes con el uso de las herramientas de la CLI mediante programación de esta manera, especialmente si necesita pasar JSON a la herramienta de la CLI.

about 4 years ago · Juan Pablo Isaza Relatório

0

Tu puedes hacer:

 const json = { "ARN": "arn:aws:secretsmanager:us-west-2:0000:secret:token-0000", "Name": "token", "VersionId": "0000-0000-0000-0000-0000", "SecretString": "{\"TOKEN\":\"000000000000\"}", "VersionStages": ["AWSCURRENT"], "CreatedDate": "0000" } json.SecretString = JSON.parse(json.SecretString) const { SecretString: { TOKEN: token } } = json console.log('Token:', token)

about 4 years ago · Juan Pablo Isaza Relatório

0

intente con comillas simples en lugar de comillas dobles para el valor de cadena del JSON

 { "ARN": 'arn:aws:secretsmanager:us-west-2:0000:secret:token-0000', "Name": 'token', "VersionId": '0000-0000-0000-0000-0000', "SecretString": '{\"TOKEN\":\"000000000000\"}', "VersionStages": ['AWSCURRENT'], "CreatedDate": '0000' }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda