【前端分享】JS如何判断一个字符串 是 数组或者对象通过JSON.stringfy转换成的字符串!

图片

 

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. 关键知识点说明

  1. 为什么用 Object.prototype.toString.call
    比 typeof 更精准:

    • typeof null → object(误判)

    • Object.prototype.toString.call(null) → [object Null](精准)

  2. 边界情况覆盖

    • 空对象 '{}'、空数组 '[]' → 返回 true

    • 非法 JSON(缺少引号、语法错误)→ 捕获异常返回 false

    • 非字符串类型(数字/布尔/对象)→ 直接返回 false

  3. 核心逻辑
    只有合法的 JSON 格式字符串,且解析后是对象/数组,才判定为 JSON.stringify 转换的字符串。

3.1. 总结

  1. 用 JSON.parse 尝试解析,捕获解析异常

  2. 解析成功后,判断结果是否为对象/数组

  3. 工具函数可直接复制使用,覆盖所有常见场景
     

    ·······END·······

      喜欢的话可以点个赞关注博主哦!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值