一尘不染

使用jQuery.parseJSON的JSON解析错误

json

这段代码失败,并带有指示无效JSON的异常:

var example = '{ "AKEY": undefined }';
jQuery.parseJSON(example);

我可以通过用空字符串替换所有未定义内容来修复它。undefined不是JSON的一部分吗?


阅读 319

收藏
2020-07-27

共1个答案

一尘不染

如果您可以解决这个问题,那么 令牌 undefined实际上是未定义的。

请允许我详细说明:即使JavaScript具有称为undefined的特殊原始值,undefined也不
是JavaScript关键字,也没有任何特殊含义。通过与undefined定义对象进行比较,可以破坏测试对象是否存在的代码。

var obj = { BKEY: 'I exist!' };
if (obj.AKEY == undefined) console.log ('no AKEY');
if (obj.BKEY == undefined) console.log ('should not happen');

undefined='uh oh';

if (obj.AKEY == undefined) console.log ('oops!'); // Logically, we want this to execute, but it will not!
if (obj.BKEY == undefined) console.log ('should not happen');

唯一的控制台输出将是“ no AKEY”。分配给全局变量后undefinedobj.AKEY == undefined由于变为false
_undefined_ != 'uh oh'obj.BKEY == undefined仍然返回false,但这仅仅是因为我们很幸运。如果我已经设定obj.BKEY='uh oh',那obj.BKEY == undefined将是 真的即使它确实存在

您可能需要显式设置AKEYnull。(顺便说一句,null 一个关键字;null='uh oh'引发异常)。

您也可以简单地AKEY从JSON中省略,在这种情况下,您会发现:

typeof(example.AKEY) == 'undefined'

(如果设置AKEYnull,则为typeof(example.AKEY) == 'object'。)

设置为null和忽略之间的唯一真正区别是您是否希望密钥出现在foreach循环中。

2020-07-27