Vue3中JSON字符串转对象的常用方法小结

 更新时间:2025年09月23日 10:05:09   作者:BillKu  
这篇文章主要介绍了Vue3中将JSON字符串转对象的三种方法:推荐使用JSON.parse(),安全且性能好,但需严格格式和错误处理;eval()不推荐,因安全风险和性能差,建议始终用try...catch包裹,确保应用稳健,需要的朋友可以参考下

JSON 字符串转对象方法

1. 使用 JSON.parse()(推荐)

JSON.parse() 是浏览器原生的方法,它能够将符合 JSON 格式的字符串转换为 JavaScript 对象。

const jsonString = '{"name": "John", "age": 30, "city": "New York"}';
// 使用 JSON.parse() 进行转换
const jsonObject = JSON.parse(jsonString);
console.log(jsonObject.name); // 输出: John

重要:添加错误处理

JSON 字符串格式必须严格合法(例如,属性名必须用双引号括起来),否则 JSON.parse() 会抛出错误。务必使用 try...catch 进行错误处理

let jsonObject;
try {
  jsonObject = JSON.parse(jsonString);
  console.log('转换成功', jsonObject);
} catch (error) {
  console.error("JSON 解析失败:", error);
  // 在这里可以进行容错处理,例如设置一个默认空对象
  jsonObject = {};
}

2. 使用 eval()(不推荐,了解即可)

eval() 函数可以执行字符串中的 JavaScript 代码,因此也能解析 JSON 字符串。

const jsonString = '{"name": "John", "age": 30, "city": "New York"}';
const jsonObject = eval('(' + jsonString + ')'); // 注意这里的括号
console.log(jsonObject);

为什么不推荐 eval()

  • 安全性风险eval() 会执行字符串中的任何代码。如果字符串来源不可信(例如来自用户输入或第三方),可能包含恶意脚本,导致严重的安全漏洞(XSS 攻击)。
  • 性能较差eval() 的执行速度通常比 JSON.parse() 慢。

因此,除非有特殊理由并且你能完全控制字符串来源,否则请始终使用 JSON.parse()

3. 在 Vue 组件中的使用示例

在实际的 Vue 3 组件中,你可能会在 生命周期钩子方法 或 计算属性 中进行转换。

示例:处理来自 API 的 JSON 数据

许多时候,JSON 字符串来源于后端 API 的响应。

<template>
  <div>
    <h1>User Info</h1>
    <p v-if="user">Name: {{ user.name }}</p>
    <p v-if="user">Age: {{ user.age }}</p>
    <p v-if="user">City: {{ user.city }}</p>
    <p v-else>Loading...</p>
  </div>
</template>

<script>
import { ref, onMounted } from 'vue';

export default {
  setup() {
    const user = ref(null); // 初始值为 null

    onMounted(async () => {
      // 模拟从 API 获取到一个 JSON 字符串
      const responseJsonString = '{"name": "Alice", "age": 25, "city": "London"}';

      try {
        // 1. 将字符串解析为对象
        const userData = JSON.parse(responseJsonString);
        // 2. 将响应式变量赋值
        user.value = userData;
      } catch (error) {
        console.error("Error parsing JSON:", error);
        // 处理错误,例如设置一个默认用户对象或显示错误信息
        user.value = { name: 'Unknown', age: 0, city: 'Nowhere' };
      }
    });

    return {
      user
    };
  }
};
</script>

示例:使用计算属性(Computed)

如果字符串是响应式的(例如来自 ref 或 reactive),你可以使用计算属性自动进行转换和派生。

<template>
  <div>
    <p>Name: {{ userObject?.name }}</p>
    <p>Age: {{ userObject?.age }}</p>
  </div>
</template>

<script>
import { ref, computed } from 'vue';

export default {
  setup() {
    const jsonString = ref('{"name": "Bob", "age": 40}');

    const userObject = computed(() => {
      try {
        return JSON.parse(jsonString.value);
      } catch (error) {
        console.error("Computed property parsing failed:", error);
        return null;
      }
    });

    return {
      userObject
    };
  }
};
</script>

注意事项

严格的 JSON 格式JSON.parse() 要求字符串必须是标准的 JSON 格式

  • ✅ 正确:'{"name": "John", "age": 30}' (键和字符串值都用双引号)
  • ❌ 错误:"{name: 'John', age: 30}" (键没有引号,值用了单引号)

安全性:始终对要解析的字符串来源保持警惕,特别是对于来自用户输入或第三方 API 的数据。使用 try...catch 是防止应用崩溃的关键。

Vue 的响应性:使用 JSON.parse() 返回的是一个普通对象,你需要将其赋值给 Vue 的响应式变量(如 ref 或 reactive)才能在模板中触发更新。

qs 库并非用于此场景:搜索结果中提到的 qs 库主要用于解析 URL 查询字符串 (如 a=1&b=2),而不是标准的 JSON 字符串。处理标准 JSON,JSON.parse() 就够了。

总结

方法推荐度优点缺点适用场景
JSON.parse()★★★★★标准、安全、性能好要求严格的 JSON 格式绝大多数场景
eval()★☆☆☆☆能解析非标准格式极高安全风险、性能差、需谨慎处理括号应避免,仅在极端受控环境下

记住这个最佳实践:坚持使用 JSON.parse() 并始终用 try...catch 块包裹它。这能确保你的 Vue 3 应用既健壮又安全。

到此这篇关于Vue3中JSON字符串转对象的常用方法小结的文章就介绍到这了,更多相关Vue3 JSON字符串转对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue实现微信分享链接添加动态参数的方法

    vue实现微信分享链接添加动态参数的方法

    这篇文章主要介绍了vue微信分享链接添加动态参数的实现方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • vue+vuecli+webpack中使用mockjs模拟后端数据的示例

    vue+vuecli+webpack中使用mockjs模拟后端数据的示例

    本篇文章主要介绍了vue+vuecli+webpack中使用mockjs模拟后端数据的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-10-10
  • Vue不能检测到Object/Array更新的情况的解决

    Vue不能检测到Object/Array更新的情况的解决

    本篇文章主要介绍了Vue不能检测到Object/Array更新的情况的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • vue3如何实现PDF文件在线预览功能

    vue3如何实现PDF文件在线预览功能

    PDF文件在线预览的功能相信大家都是有遇到过的,下面这篇文章主要给大家介绍了关于vue3如何实现PDF文件在线预览功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • VueX如何实现数据共享

    VueX如何实现数据共享

    这篇文章主要介绍了VueX如何实现数据共享问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Vite中Rollup打包的实现

    Vite中Rollup打包的实现

    Rollup是一个JavaScript模块打包器,它可以将多个小的JavaScript 模块打包成一个大的模块,本文主要介绍了Vite中Rollup打包的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • 写一个Vue Popup组件

    写一个Vue Popup组件

    这篇文章主要介绍了写一个Vue Popup组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • Vue3如何处理重复渲染代码的问题

    Vue3如何处理重复渲染代码的问题

    这篇文章主要来和大家一起探讨一下在Vue3项目中如何处理重复渲染代码的问题,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • vue自定义指令添加跟随鼠标光标提示框v-tooltip方式

    vue自定义指令添加跟随鼠标光标提示框v-tooltip方式

    这篇文章主要介绍了vue自定义指令添加跟随鼠标光标提示框v-tooltip方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • el-dialog关闭再打开后窗口内容不刷新问题及解决

    el-dialog关闭再打开后窗口内容不刷新问题及解决

    这篇文章主要介绍了el-dialog关闭再打开后窗口内容不刷新问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论