如何保留数组中值的引号

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 认为有必要添加外部引号,但这是一个错误。 无论如何,我认为卡罗琳应该重写她期望的回报

以上是关于如何保留数组中值的引号的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Bash 参数中保留引号? [复制]

在mysql中插入时保留双引号和单引号以及转义字符

去除数组中值的双引号

如何在 Oracle 中转义保留字?

R读取表格,将引号保留在字符串中

计算3x3窗口的均值滤波和中值滤波(向下取整保留整数值)。