存储在AWS EB环境变量中的JSON不带引号检索

Vad*_*dim 8 amazon-web-services node.js amazon-elastic-beanstalk

我正在运行node.js EB容器并尝试将JSON存储在环境变量中.JSON正确存储,但是当通过process.env.MYVARIABLE检索它时,将返回所有双引号被剥离.

例如,MYVARIABLE看起来像这样:

{ "prop": "value" }

当我通过process.env.MYVARIABLE检索它时,它的值是实际的{ prop: value},这是无效的JSON.我试图用'\'即{\"prop \":\"value \"}来逃避引号,这只会在字符串返回时添加更多奇怪的行为{\ \"prop\\":\ \"value\\" }.我也尝试用单引号包装整个东西,例如'{ "prop": "value" }',但它似乎也剥离了它们.

任何人都知道如何在环境变量中存储JSON?

编辑:更多信息,当您设置环境变量时,似乎某些字符被双重转义.例如,如果我用单引号包装对象.当我使用sdk获取它时的值变为:

\'{ "prop": "value"}\'

另外,如果我将引号保留,反斜杠会被转义,所以{"url": "http://..."}当我通过sdk查询对象看起来像结果时{"url": "http:\\/\\/..."}

它不仅会破坏文本,还会重新排列JSON属性,因此属性的显示顺序与我设置的顺序不同.

UPDATE

所以我认为这似乎是AWS中的一个错误,因为它似乎正在破坏提交的值.无论我使用node.js sdk还是Web控制台,都会发生这种情况.作为一种解决方法,我在部署期间用json对象上的单引号替换双引号,然后再在应用程序中再次使用.

Sam*_* H. 3

使用base64编码

一条重要的字符串正在被自动神奇地破坏。我们不知道EB的内部结构,但我们可以猜测它正在解析JSON。所以不要存储 JSON,而是存储 base64 编码的 JSON:

a = `{ "public": { "s3path": "https://d2v4p3rms9rvi3.cloudfront.net" } }`
x = btoa(a) // store this as B_MYVAR
// "eyAicHVibGljIjogeyAiczNwYXRoIjogImh0dHBzOi8vZDJ2NHAzcm1zOXJ2aTMuY2xvdWRmcm9udC5uZXQiIH0gfQ=="


settings = JSON.parse(atob(process.env.B_MYVAR))
settings.public.s3path
// "https://d2v4p3rms9rvi3.cloudfront.net"
// Or even:

process.env.MYVAR = atob(process.env.B_MYVAR)
// Sets MYVAR at runtime, hopefully soon enough for your purposes
Run Code Online (Sandbox Code Playgroud)

由于这是 JS,所以有关于 UTF8 和节点/浏览器支持的警告,但我认为atobbtoa是常见的。文档