繁体   English   中英

Json.parse 将数字视为字符串作为有效的 json 对象

[英]Json.parse considers number as a string as valid json object

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'));

这返回真。

需要知道为什么 json.parse 将纯数字视为字符串有效的 json 和字符无效的 json 的字符串。 如果是新手问题,请见谅。

111

是有效的 JSON 文字值。 JSON 支持数字文字,这就是其中之一。

W-11

这是无效的 JSON。 字符W-在 JSON 规范中没有意义(嗯, -将是负数文字的一部分,但无论如何......)。 如果你想形成一个 JSON 字符串文字,这将是一个:

"W-11"

所以:

JSON.parse('"W-11"')  // ok

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

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

如果它是doublequoted那么它是一个字符串,否则它是一个numeric , boolean , null

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到一个数,结果是一个数字(或NaN )。

无论哪种方式,都不可能使用JSON.stringify()生成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`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM