
JS 判断字符串是否为 JSON.stringify 转换的数组/对象字符串
核心思路:尝试用 JSON.parse 解析字符串
-
能正常解析出对象({})或数组([]) → 是
JSON.stringify转换的字符串 -
解析报错、或解析结果是原始类型(字符串/数字/布尔/null)→ 不是
1. 完整工具函数(直接可用)
/**
* 判断字符串是否是 JSON.stringify 转换的 数组/对象 字符串
* @param {string} str - 要判断的字符串
* @returns {boolean} 是返回 true,否则 false
*/
functionisJsonStringifyStr(str) {
// 1. 先判断是不是字符串(非字符串直接返回false)
if (typeof str !== 'string') returnfalse;
try {
// 2. 尝试解析 JSON 字符串
const result = JSON.parse(str);
// 3. 解析结果必须是 对象 或 数组(排除原始类型)
const type = Object.prototype.toString.call(result);
return type === '[object Object]' || type === '[object Array]';
} catch (err) {
// 解析失败,不是合法 JSON 字符串
returnfalse;
}
}
2. 测试用例(验证效果)
// ✅ 是 JSON.stringify 转换的字符串
console.log(isJsonStringifyStr('{"name":"张三"}')); // true(对象)
console.log(isJsonStringifyStr('[1,2,3]')); // true(数组)
console.log(isJsonStringifyStr('[{"a":1},{"b":2}]')); // true(对象数组)
// ❌ 不是
console.log(isJsonStringifyStr('hello')); // false(普通字符串)
console.log(isJsonStringifyStr('123')); // false(数字字符串)
console.log(isJsonStringifyStr('true')); // false(布尔字符串)
console.log(isJsonStringifyStr('null')); // false(null字符串)
console.log(isJsonStringifyStr('{a:1}')); // false(非法JSON)
console.log(isJsonStringifyStr(123)); // false(非字符串)
3. 关键知识点说明
-
为什么用
Object.prototype.toString.call
比typeof更精准:-
typeof null→object(误判) -
Object.prototype.toString.call(null)→[object Null](精准)
-
-
边界情况覆盖
-
空对象
'{}'、空数组'[]'→ 返回true -
非法 JSON(缺少引号、语法错误)→ 捕获异常返回
false -
非字符串类型(数字/布尔/对象)→ 直接返回
false
-
-
核心逻辑
只有合法的 JSON 格式字符串,且解析后是对象/数组,才判定为JSON.stringify转换的字符串。
3.1. 总结
-
用
JSON.parse尝试解析,捕获解析异常 -
解析成功后,判断结果是否为对象/数组
-
工具函数可直接复制使用,覆盖所有常见场景
·······END·······
喜欢的话可以点个赞关注博主哦!!!

1万+

被折叠的 条评论
为什么被折叠?



