首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Json.parse认为数字作为字符串是有效的json对象。

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

Stack Overflow用户
提问于 2018-10-25 05:34:42
回答 3查看 1.9K关注 0票数 0
代码语言:javascript
复制
const isJson = ( str ) => {
    try {
        var res = JSON.parse( str );

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

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

此代码返回false。

代码语言:javascript
复制
const isJson = ( str ) => {
    try {
        var res = JSON.parse( str );

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

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

这将返回真。

需要了解为什么json.parse将纯数字视为字符串、有效的json和字符无效的字符串。如果这是个新手的问题,我很抱歉。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-25 06:10:36

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

假设要解码的两个字符串都是有效的JSON,生成它们的代码应该如下所示:

代码语言:javascript
复制
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)。

无论哪种方式,都不可能使用W-11生成JSON.stringify() (因为它不是有效的JSON)。您可能想要的是解析字符串"W-11"并将W-11作为编码的值来生成它:

代码语言:javascript
复制
console.log(JSON.parse('"W-11"'));
// W-11

您的困惑来自于这样一个事实:在JavaScript代码中,字符串被引号或撇号包围。这就是解释器如何知道引号之间的字符表示自己,它们不能被解释为代码。

在代码中,'W-11'是编码为JavaScript的字符串,而字符串的实际值是W-11 (没有引号)。您还可以用JavaScript代码编写它,如"W-11"`W-11`

票数 1
EN

Stack Overflow用户

发布于 2018-10-25 05:42:36

代码语言:javascript
复制
111

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

代码语言:javascript
复制
W-11

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

代码语言:javascript
复制
"W-11"

所以:

代码语言:javascript
复制
JSON.parse('"W-11"')  // ok

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

票数 0
EN

Stack Overflow用户

发布于 2018-10-25 05:42:45

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

如果它是doublequoted,那么它是一个字符串,它是一个numericbooleannull

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52981970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档