如果JSON.parse能够转换成功,并且不等于 null,
并且转换后的类型为object,或 array,那么这个字符串就是JSON格式的字符串
JSON.parse()之后,还必须判断数据类型,因为还有很多列外,例如
JSON.parse('123'); // 123
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null
isJSON
判断数据是不是 对象或数组格式
function isJSON(value) {
if (typeof value == 'string') {
try {
const obj = JSON.parse(value);
const isObject = (typeof obj === 'object') || Array.isArray(obj);
return !!(obj && isObject);
} catch (e) {
return false;
}
}
else if(value && typeof value === 'object') {
return true
}
}
判断字符串是不是 json
字符串转化的值,如果是对象,或数组,就认为是 Object
function isJSON(value) {
if (typeof value == 'string') {
try {
const obj = JSON.parse(value);
return !!(obj && isObject);
} catch (e) {
return false;
}
}
}
function isObject (obj) {
const isObject = Object.prototype.toString.call(obj) === '[object Object]';
return isObject || Array.isArray(obj);
}
验证的值有
- ‘123’
- 123
- ‘true’
- ‘undefined’
- ‘null’
- ‘[]’
- ‘{}’
- 不规范的 json格式也返回 false
- JSON.parse(‘{“name”:”123”,}’) 报错,
- isJSON(‘[10,]’)
isJSON缺点
- 如果传入的值是 new String(), 或 new Date,以 new开头的会返回 true
- 因为 (new Date) instanceof Object,返回 true
- 所以不要传入构造函数,直接传入字符串