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

发布于 2022-09-12 00:30:12 字数 291 浏览 16 评论 0

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

享受孤独 2022-09-19 00:30:12

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

item = JSON.parse(item)

}
}catch(e){}
})
`

独夜无伴 2022-09-19 00:30:12
// 判断是否为标准 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文