JSON.stringify在属性上没有引号?

JSON.stringify在属性上没有引号?

 

https://qastack.cn/programming/11233498/json-stringify-without-quotes-on-properties

 

 

 

JSON.stringify在属性上没有引号?


95

我正在使用使用不正确的JSON格式的服务(属性周围没有双引号)。所以我需要发送

{ name: "John Smith" } 代替 { "name": "John Smith" }

无法更改此格式,因为这不是我的服务。

有谁知道像上面这样格式化JavaScript对象的字符串化路由?

javascript  json 

— 杰登特
 source

Answers:


115

在大多数情况下,此简单的正则表达式解决方案可取消对JSON属性名称的引用:

 

const object = { name: 'John Smith' };
const json = JSON.stringify(object);  // {"name":"John Smith"}
console.log(json);
const unquoted = json.replace(/"([^"]+)":/g, '$1:');
console.log(unquoted);  // {name:"John Smith"}

运行代码段

展开摘要

 

极端情况:

var json = '{ "name": "J\\":ohn Smith" }'
json.replace(/\\"/g,"\uFFFF");  // U+ FFFF
json = json.replace(/"([^"]+)":/g, '$1:').replace(/\uFFFF/g, '\\\"');
// '{ name: "J\":ohn Smith" }'

特别感谢Rob W修复了它。

局限性

在正常情况下,上述正则表达式可以正常工作,但是从数学上讲,不可能用正则表达式来描述JSON格式,以使其在每种情况下都可以工作(对于正则表达式,计数相同数量的花括号是不可能的。)通过本地函数正式解析JSON字符串并重新序列化,创建一个新的函数以删除引号:

function stringify(obj_from_json) {
    if (typeof obj_from_json !== "object" || Array.isArray(obj_from_json)){
        // not an object, stringify using native function
        return JSON.stringify(obj_from_json);
    }
    // Implements recursive object serialization according to JSON spec
    // but without quotes around the keys.
    let props = Object
        .keys(obj_from_json)
        .map(key => `${key}:${stringify(obj_from_json[key])}`)
        .join(",");
    return `{${props}}`;
}

示例:https//jsfiddle.net/DerekL/mssybp3k/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值