如何保留数组中值的引号
Posted
技术标签:
【中文标题】如何保留数组中值的引号【英文标题】:How to preserve quotes on values in array 【发布时间】:2017-02-24 02:49:37 【问题描述】:我必须为一个类重做 JSON.stringify 的功能,我被卡住了......
如果我传递了一个数组,我需要将确切的数组作为字符串返回。但是,当我返回数组时,它会从任何字符串值中去掉引号。例如:
var arr = [8, "hello"];
var addQuotes = function(arr)
return ('[' + arr + ']');
addQuotes(arr);
//"[8, hello]"
但是,我需要它返回:
"[8, "hello"]"
如何保留数组值的引号?
【问题讨论】:
您需要一次查看一个值,如果给定一个字符串,则在该值的输出中添加引号。 那是因为你在字符串上下文中使用数组,JS在字符串化的时候会去掉引号。x = [1,"hello"]; y = '' + x
-> [1,hello]
。构建 json 不仅仅是将一些文本拼接在一起的简单问题。您实际上是在构建 javascript 代码(具有更严格的语法),并且必须构建语法上有效的 JS
...顺便说一句,如果您要复制 JSON 数据,则不需要那些外部单引号。这不是有效的 JSON。
@MarcB:OP 正在创建 JSON 数据,而不是 JavaScript 字符串文字。所以外部引号不应该在那里。至于去掉引号,那是令人困惑的。这听起来像是引号是数据的一部分。这是我提到它的唯一原因。
@MarcB 你是对的,那是 OP 的工作,通过添加 "'" +
手动为 JSONString 添加前缀是一种糟糕的方式来指定字符串是 JSON,尤其是因为它使它无效的 JSON。
【参考方案1】:
我提出这个代码:
var arr = [8, "hello"];
var arrString = arr.map(x => typeof x === 'string' ? "\"" + x + "\"" : x);
result = "\"[" + arrString.join(", ") + "]\""
console.log(result); // ) "[8, "hello"]"
【讨论】:
它不是一个 polyfill,但它将提供适用于问题中给定数据的部分实现,除了外部单引号使其作为 JSON 数据无效。他们不应该在那里。 但是外面的双引号也没有意义。您将如何在 JS 程序中表示 JSON 数据与 JSON 数据本身混淆了。如果您有一个包含var j = '[8, "hello"]'
的程序,那么j
将包含JSON 文本,特别是没有 外引号。 j[0] === "'"; // false j[0] === "["; // true
。所以 actual JSON 表示将以[
开头并以]
结尾。
这是真的,但符合这篇文章的规范
OP 需要的是一个有效的 JSON 结果。由于对 JSON 是 以及它与 JavaScript 的区别的普遍误解,OP 认为有必要添加外部引号,但这是一个错误。
无论如何,我认为卡罗琳应该重写她期望的回报以上是关于如何保留数组中值的引号的主要内容,如果未能解决你的问题,请参考以下文章