JSON.stringify() 在值上带有单引号,在键上没有引号

Posted

技术标签:

【中文标题】JSON.stringify() 在值上带有单引号,在键上没有引号【英文标题】:JSON.stringify() with single quotes on value and no quotes on key 【发布时间】:2021-01-10 22:41:09 【问题描述】:

javascript 中:打印一个 json 对象

var myObject = new Object;
myObject.type = "Fiat";
myObject.model = "500";
myObject.color = "White";

以下格式

类型:“菲亚特”,型号:“500”,颜色:“白色”

在 console.log 中。

但实际结果

"type":"Fiat","model":"500","color":"White"

挑战来了:

hackerrank print JSON object

function printObjectProperty(myObject) 
  //Write your code here
console.log(JSON.stringify(myObject)); 
 //OR
console.log(" type: '"+myObject.type+"', model: '"+myObject.model+"', color: '"+myObject.color+"'"); //OR THERE COULD BE A BETTER GENERIC SOLUTION

【问题讨论】:

您的链接已损坏。无法共享 HackerRank 链接。 我不确定 type: 'Fiat', model: '500', color: 'White' 是有效的 JSON。它是一个有效的 JS 对象,虽然不确定 JSON,这就是 stringify 不生成它的原因。 【参考方案1】:

JSON.stringify() 值没有单引号,键没有引号

你不能。按设计。

The JSON specification 要求所有属性的名称用双引号括起来并解析为 JSON 字符串:

1。简介

[...] 对象是零个或多个名称/值对的无序集合,其中名称是字符串,值是字符串、数字、布尔值、null、对象或数组。

4。对象

对象结构表示为一对围绕零个或多个名称/值对(或成员)的花括号。 名称是字符串。每个名称后面都有一个冒号,将名称与值分开。单个逗号将值与后面的名称分开。

【讨论】:

好的,但是hackerrank已经发布了这个挑战。【参考方案2】:

您可以使用以下代码:

var json = JSON.stringify(myObject);  // "type":"Fiat","model":"500","color":"White"
console.log(json);
var unquoted = json.replace(/"([^"]+)":/g, '$1:');
console.log(unquoted);  // type:"Fiat",model:"500",color:"White"
var result = unquoted.replaceAll("\"", "'");
console.log(result); // type:'Fiat',model:'500',color:'White'

【讨论】:

在这个正则表达式中,仍然缺少空格。每个 key 和 value 之前的空格。我会尝试修改这个正则表达式。谢谢。 第 3 行更改如下 json.replace(/"([^"]+)":/g, ' $1: '); 当字段包含引号时,此解决方案是错误的。例如 "a: "a'a""

以上是关于JSON.stringify() 在值上带有单引号,在键上没有引号的主要内容,如果未能解决你的问题,请参考以下文章

JSON.stringify(),JSON.parse()

JSON.stringify() / JSON.parse()

JSON.parse()和JSON.stringify()

JSON.parse()和JSON.stringify()

JSON.parse()和JSON.stringify()

JSON.parse()和JSON.stringify()