【问题标题】: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。

标签: javascript arrays string stringify


【解决方案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 认为有必要添加外部引号,但这是一个错误。
  • 无论如何,我认为卡罗琳应该重写她期望的回报
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 2010-12-12
  • 2015-01-06
  • 2014-07-28
  • 2021-09-28
相关资源
最近更新 更多