Json.parse认为数字作为字符串是有效的json对象

时间:2018-10-25 05:34:43

标签: javascript json

const isJson = ( str ) => {
    try {
        var res = JSON.parse( str );

    } catch ( e ) {
        return false;
    }
    return true;
};

console.log(isJson('W-11'));

此代码返回false。

const isJson = ( str ) => {
    try {
        var res = JSON.parse( str );

    } catch ( e ) {
        return false;
    }
    return true;
};

console.log(isJson('123'));

这返回true。

需要知道为什么json.parse将纯数字视为有效的json字符串和字符无效的json字符串。抱歉,这是一个新手问题。

3 个答案:

答案 0 :(得分:0)

111

是有效的JSON文字值。 JSON支持数字文字,这是一个。

W-11

这是无效的JSON。字符W-在JSON规范中没有意义(嗯,-将是负数文字的一部分,但无论如何……)。如果要形成JSON字符串文字,则为以下形式:

"W-11"

所以:

JSON.parse('"W-11"')  // ok
您的Javascript字符串的

内容必须是有效的JSON。 W-11不是JSON的字符串,只有"W-11"是。

答案 1 :(得分:0)

如果您希望'W-11'工作,请在'"W-1"'函数中像这样isJSON传递它

如果为doublequoted,则为字符串,否则为numericbooleannull

答案 2 :(得分:0)

JSON是某些数据结构(通常是数组或对象)的文本表示形式,但原始值(例如字符串,数字和布尔值)也可以编码为JSON(并成功解码)。

假设您要解码的两个字符串都是有效的JSON,则生成它们的代码应类似于:

var x = 123;
var a = JSON.stringify(x);
// a == '123'

var y = W-11;
var b = JSON.stringify(y);
// b != 'W-11'

如果您尝试运行此代码,则语句y = W-11会触发ReferenceError(“未定义W”)。
或者,如果定义了W变量 ,则W-11是一个减法,试图将W转换为数字,结果是一个数字(或{{ 3}})。

无论哪种方式,都无法使用NaN生成W-11(因为它不是有效的JSON)。您可能想要的是解析字符串"W-11"并获取W-11作为对其进行编码的值:

console.log(JSON.parse('"W-11"'));
// W-11

您的困惑来自以下事实:在JavaScript代码中,字符串用引号或撇号引起来。这样,解释器便知道引号之间的字符代表自己,并且不能将其解释为代码。
在代码中,'W-11'是编码为JavaScript的字符串,而字符串的实际值为W-11(无引号)。您也可以使用JavaScript代码将其编写为"W-11"`W-11`