本来以为这个问题挺简单的
复制一个对象粘贴到输入框里
获取值的时候把它转成JSON字符串
复制的对象数据是这样的
{
"q": "710022883",
"id": "333",
"extra": [
{
"extra": "23",
"qty": 1,
"id": "222"
},
{
"id": "2333",
"qty": 1,
"extra": "222"
}
],
"qty": 1,
"spec": "123",
}
粘贴到输入框里是这样的
{ "q": "710022883", "id": "333", "extra": [ { "extra": "23", "qty": 1, "id": "222" }, { "id": "2333", "qty": 1, "extra": "222" } ], "qty": 1, "spec": "123", }
怎么把它转成下面这种格式呢
{"q":"710022883","id":"333","extra":[{"extra":"23","qty":1,"id":"222"},{"id":"2333","qty":1,"extra":"222"}],"qty":1,"spec":"123",}
就是这个地址粘贴进去,点压缩的效果。
https://www.sojson.com/yasuo....
JSON 压缩,即去除多余空格
首先,你这个数据格式不符合 JSON 规范,JSON 规定不允许有尾随逗号
把这个逗号去了,然后用
JSON.stringify(JSON.parse(data))
即可压缩(去除多余空格)题外话:
之所以你那个网站能压缩,是因为它并没有遵循 JSON 规范,校验 JSON 格式,只是自己对字符串进行简单处理,以下是它的源码
像这样写,不遵循 JSON 规范,会导致一些 bug,举个反例:
它的压缩结果是
正确是
能正确压缩 JSON 的网站:
扩展
JSON 解析除了用
JSON.parse()
还可以用 @唯一丶 提议的 JSON5 的JSON5.parse()
,JSON5 兼容 JSON,且允许尾随逗号如果数据量很大,要慎用 JSON5,因为
JSON5.parse()
是 JS 实现的,性能远不及内置原生代码实现的JSON.parse()
,一比十几甚至几十当然也不是非要先解析再序列化,只要遵循 JSON 规范正确去除空白字符即可,主要是要绕过 JSON 字符串内部的空格,但如果自己写循环判断,性能会不如
JSON.stringify(JSON.parse(text))
,可以利用正则表达式可以看到去了也仅去了在 JSON 字符串外部的空白字符,剩下的字符保持不变,尾随逗号也在
因为正则表达式也是内置原生代码实现的,性能也很高,经过测试
compactJSON(text)
比JSON.stringify(JSON.parse(text))
还要快 \( 60\% \) 左右测试数据:
在我电脑的 Chrome 上分别执行 \( 10^6 \) 次
JSON.stringify(JSON.parse(text))
耗时大约 \( 4 \) 秒compactJSON(text)
耗时大约 \( 2.5 \) 秒