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和字符无效的字符串。如果这是个新手的问题,我很抱歉。
发布于 2018-10-25 06:10:36
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)。
无论哪种方式,都不可能使用W-11生成JSON.stringify() (因为它不是有效的JSON)。您可能想要的是解析字符串"W-11"并将W-11作为编码的值来生成它:
console.log(JSON.parse('"W-11"'));
// W-11您的困惑来自于这样一个事实:在JavaScript代码中,字符串被引号或撇号包围。这就是解释器如何知道引号之间的字符表示自己,它们不能被解释为代码。
在代码中,'W-11'是编码为JavaScript的字符串,而字符串的实际值是W-11 (没有引号)。您还可以用JavaScript代码编写它,如"W-11"或`W-11`。
发布于 2018-10-25 05:42:36
111是一个有效的JSON文本值。JSON支持数字文本,这是一个。
W-11这是无效的JSON。在JSON规范中,字符W和-没有任何意义( -将是负数文字的一部分,但无论如何是…)。如果您想要形成一个JSON字符串文本,这将是一个:
"W-11"所以:
JSON.parse('"W-11"') // okJavascript字符串的contents必须是有效的JSON。W-11不是JSON的字符串,只有"W-11"是字符串。
发布于 2018-10-25 05:42:45
如果您希望'W-11'工作,那么在isJSON函数中像这样传递它
如果它是doublequoted,那么它是一个字符串,它是一个numeric,boolean,null。
https://stackoverflow.com/questions/52981970
复制相似问题