[英]Extra quote marks in Node JSON.stringify
我有一个创建和导出配置对象的模块。 在浏览器环境中运行时,其字符串值必须为JSON.stringified。 否则,它们将被解释为裸标识符。
在节点中,JSON.stringify似乎添加了多余的双引号集。
哪种解决方案在浏览器和节点上均适用?
我检出的大多数节点模块都在搜索JSON.stringify,处理复杂对象的字符串表示形式/翻译。
module.exports = {
url: JSON.stringify(process.env.SOME_URL),
// in node, resolves to '"https://..."'
headers: {
Authorization: JSON.stringify(basicAuthString),
// in node, resolves to '"Basic ...="'
'Content-Type': JSON.stringify('application/json'),
}
};
module.exports = {
url: process.env.SOME_URL,
// in node, resolves to bare https://...
// Uncaught SyntaxError: Unexpected token :
headers: {
Authorization: basicAuthString,
// in browser, resolves to bare Basic ...=
// actions.js:15 Uncaught SyntaxError: Unexpected identifier
'Content-Type': JSON.stringify('application/json'),
}
};
对于webpack, process.env
值是使用以下方法在构建时捕获的: https : //github.com/AngularClass/angular2-webpack-starter/wiki/How-to-pass-environment-variables
此解决方法仅检查开头和结尾处的重复引号。 它可以在两种环境下工作。
const str = (s) => {
let ret = JSON.stringify(s);
if (ret.indexOf('""') === 0) {
ret = ret.slice(1);
}
if (ret[ret.length - 2] === '"') {
ret = ret.slice(0, -1 + ret.length);
}
return ret;
};
module.exports = { foo: str('bar') };
根据定义, JSON.stringify()
通过添加额外的引号将字符串转换为字符串。
如果Type(value)为String,则返回调用带有参数值的抽象操作Quote的结果。
不能只使用String()
而不是JSON.stringify()
String()
?
Node不会更改字符串,webpack也应该正确处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.