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

谁家的鸡
  • 22

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

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

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

回复
阅读 1.5k
2 个回答

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

item = JSON.parse(item)

}
}catch(e){}
})
`

// 判断是否为标准 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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏