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设置页面背景及背景图片的相关资料,在Vue项目开发中我们经常要向页面中添加背景图片,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • vue动态绑定组件子父组件多表单验证功能的实现代码

    vue动态绑定组件子父组件多表单验证功能的实现代码

    这篇文章主要介绍了vue动态绑定组件子父组件多表单验证功能的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • Vue 样式切换及三元判断样式关联操作

    Vue 样式切换及三元判断样式关联操作

    这篇文章主要介绍了Vue 样式切换及三元判断样式关联操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 利用Vue3实现一个可以用js调用的组件

    利用Vue3实现一个可以用js调用的组件

    最近遇到个功能要求,想要在全局中调用组件,而且要在某些js文件内调用,所以这篇文章主要给大家介绍了关于如何利用Vue3实现一个可以用js调用的组件的相关资料,需要的朋友可以参考下
    2021-08-08
  • vue 点击按钮增加一行的方法

    vue 点击按钮增加一行的方法

    今天小编就为大家分享一篇vue 点击按钮增加一行的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 基于Vue实现可以拖拽的树形表格实例详解

    基于Vue实现可以拖拽的树形表格实例详解

    因业务需求,需要一个树形表格,并且支持拖拽排序,任意未知插入,github搜了下,真不到合适的,大部分树形表格都没有拖拽功能,所以决定自己实现一个。这里分享一下实现过程,需要的朋友可以参考下
    2018-10-10
  • vue实现拖拽滑动分割面板

    vue实现拖拽滑动分割面板

    这篇文章主要为大家详细介绍了vue实现拖拽滑动分割面板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • VUE脚手架具体使用方法

    VUE脚手架具体使用方法

    这篇文章主要介绍了VUE脚手架具体使用方法,vue-cli这个构建工具大大降低了webpack的使用难度,小编觉得不错,下面就一起来了解一下具体使用方法
    2019-05-05
  • Vue组件中的父子组件使用

    Vue组件中的父子组件使用

    这篇文章主要介绍了Vue组件中的父子组件使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • vue.js出现Vue.js not detected错误的解决方案

    vue.js出现Vue.js not detected错误的解决方案

    这篇文章主要介绍了vue.js出现Vue.js not detected错误的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论