写了个解析非正常 JSON 字符串的包——fbbk-json
发布于 10 年前 作者 XadillaX 5066 次浏览 最后一次编辑是 8 年前 来自 分享

F[嗶][嗶]k JSON

fbbk-json

解析非正常 JSON 字符串的一个包。

安装

$ npm install fbbk-json

使用

这个包只有一个函数:

var fJSON = require("fbbk-json");
fJSON.parse(A_JSON_STRING);

但是

这个包支持如下的 JSON 字符串(即在 javascript 中我们通常申明的样子,没有引号)。

举个栗子🌰

'{"foo": "bar","baz": true}'    <-- JSON 和 fJSON 都支持
'{foo: "bar",baz: true}'        <-- 只有 fJSON 支持! ٩(๑•̀ω•́๑)۶

所以你可以:

var json1 = '{"foo": "bar","baz": true}';
var json2 = '{foo: "bar",baz: true,c:[]}';

JSON.parse(json1);              ///< { foo: 'bar', baz: true }
JSON.parse(json2);              ///< SyntaxError: Unexpected token f
fJSON.parse(json1);             ///< { foo: 'bar', baz: true }
fJSON.parse(json2);             ///< { foo: 'bar', baz: true, c: [] }   \(●´ϖ`●)/

仓库地址

https://github.com/XadillaX/fbibik-json

8 回复

这个包的意思就是说支持 js 里面的那种 object 写法是吗?

@alsotang 正解。不过只是基础类型,js 里面实际上是可以有 function 这类东西以及各种表达式存在的。

大神啊,我昨天才出的题,今天就写好了

我就是不明白为什么JSON标准,key非要双引号。

当看example里的例子,用正则实现了一下,不知道是不是满足要求了

var b = ‘{ “foo” : “bar”,baz: true , “num” : 123}’; var re = /([^\s{,"]+\s*):\s+((".*?")|\d+|true)/g; var c = b.replace(re,""$1":$2"); console.log(JSON.parse©);

##output [object Object] { baz: true, foo: “bar”, num: 123 }

@ChopperLee2011 如果是 JSON 的一个字符串里面包含了你的正则匹配内容呢?本来我们要保留字符串原样的,但是你正则是否会把它替换加上引号?

@xadillax 我只是一看到正则题目就手痒。(ΦωΦ)

@ChopperLee2011 实际上对于一般的都可以的,就是考虑到一些特殊的恶心数据。当然真要用正则的话正则里面加各种判断也是可以做到的,比如考虑双引号,然后双引号里面有反斜杠双引号什么的。

只不过我的正则是入门级的,没达到那个境界。

回到顶部