Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

238
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda