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() 在值上带有单引号,在键上没有引号的主要内容,如果未能解决你的问题,请参考以下文章