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字符串。抱歉,这是一个新手问题。
答案 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
,则为字符串,否则为numeric
,boolean
,null
。
答案 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`
。