将对象进行for遍历,如何把其中的属于JSON格式的元素转换成对象而不会报错?

例如有个对象包含多种类型元素

let obj = {
    'a1':1, //数值
    'a2':'strsssss', //文本
    'a3':[  
        "{....}",    //JSON格式
        ... 
    ],
    'a4':{....},     //对象
    'a5':"[{....}]"    //JSON格式
    'a6':"{....}"    //JSON格式
}

现在需要把对象里所有JSON格式都转换为js对象而不报错

阅读 702
评论 1月4日提问
    2 个回答

    `
    obj.forEach(item => {
    try{
    if (typeof str == 'string') {

    item = JSON.parse(item)

    }
    }catch(e){}
    })
    `

    评论 赞赏 1月4日
      // 判断是否为标准 json 类型字符串
      var isJsonStr = (data) => {
        try {
          JSON.parse(data)
          return true
        } catch (e) {
          return false
        }
      }
      
      // 递归转换并深拷贝
      var convert = (data) => {
        if (data === null || typeof data !== 'object') {
          return isJsonStr(data) ? JSON.parse(data) : data
        }
        
        let copy = Array.isArray(data) ? [] : {}
        
        Object.keys(data).forEach(key => {
          copy[key] = convert(data[key])
        })
        
        return copy
      }
      
      // 测试数据
      var source = {
        age: 26,
        name: 'gauseen',
        info: JSON.stringify({a: 'a'}),
        like: [ JSON.stringify({haha: '哈哈'}), 'eat' ],
      }
      
      // 测试
      let result = convert(source)
      console.log('result: ', result)

      一起进步 By @gauseen

      评论 赞赏 1月4日
        撰写回答

        登录后参与交流、获取后续更新提醒