uni-app怎么处理JSON数据解析

云萱君_7393

云萱君_7393

2026-11-15

221人浏览

原创

JSON.parse报错“Unexpected end of JSON input”主因是options.data为空、未解码或截断,须用try/catch包裹decodeURIComponent和JSON.parse;组件绑定对象需避免解构等语法,改用JSON.stringify或data选项;uni.request取值应校验状态码并用UTSJSONObject或TS泛型;大JSON需拆分、懒加载及缓存。

uni-app怎么处理json数据解析

JSON.parse 报错:Unexpected end of JSON input 怎么办

这是最常见也最容易被忽略的问题——options 里传来的参数根本不是合法 JSON 字符串,而是空字符串、undefined 或被截断的半截内容。真机跳转时网络抖动、URL 长度限制(微信小程序 URL 最长 2048 字符)、前端未编码就拼接,都会导致这个错误。

必须加 try/catch,且不能只捕获 JSON.parse,要从解码开始包住:

onLoad(options) {
  try {
    const raw = decodeURIComponent(options.data || '');
    if (!raw.trim()) throw new Error('empty data');
    const data = JSON.parse(raw);
    this.dataObj = data;
  } catch (e) {
    console.error('JSON parse failed:', e, { options });
    this.dataObj = {};
  }
}
  • 永远不要假设 options.data 存在或非空,它可能就是 ""
  • decodeURIComponent 必须在 JSON.parse 前调用,否则中文、&、 等字符会直接破坏 JSON 结构
  • 如果参数体积预估 > 2KB,改用 uni.setStorageSync('tempData', obj) + 路由传 key,绕过 URL 限制

组件里传对象用 :data="{...}" 为什么编译报 Expected ',' or '}' after property value

这不是运行时错误,是 uniapp 编译器在解析组件标签属性时,把 Vue 模板里的 JS 表达式误当成 JSON 字符串去解析了。尤其在 vue3 + uniapp 组合下,编译器会对 :data 的值做静态分析和序列化,一旦遇到解构、函数、动态 key、可选链(?.)等语法,就会在位置 33 左右爆 JSON 解析失败。

根本解法是避免让编译器“猜”你的表达式:

  • 写成 :data="JSON.stringify({ name: 'test', id: 123 })",显式转字符串,不给编译器留机会
  • 复杂对象别硬塞模板,改用 data 选项或 setup 里定义后绑定::data="myPayload"
  • 禁止在 :xxx 绑定中使用 ?.、??、import()、function(){} 等非纯字面量结构

uni.request 返回的 res.data 怎么安全取值

JS 写法 res.data.list[0].name 在 H5/APP 正常,但在小程序端(尤其是 UniApp X / UTS 环境)会直接报类型错误或 undefined 访问异常——因为 res.data 是 any,而小程序底层对属性访问做了强约束。

JSON Toolkit
JSON Toolkit

JSON文件多功能工具。支持格式化、验证、压缩、键排序及点记法路径查询。零依赖。

下载

推荐两种方式,按项目阶段选:

  • 过渡期用 UTSJSONObject:先断言 const data = res.data as UTSJSONObject,再用 data.getString('list[0].name'),支持深层 keypath,不崩溃但无类型提示
  • 长期维护项目务必用 type + 泛型:粘贴接口返回样例 JSON 到 HBuilderX,右键「转 type」生成 TS 接口,然后 uni.request({...}),享受完整类型推导和 IDE 提示
  • 无论哪种,都要检查 res.statusCode === 200 且 res.data 非空,服务端字段缺失比前端代码出错更常见

省市区三级数据这类大 JSON 怎么加载不卡顿

几百 KB 的 area-full.json 直接 import 进页面,首次渲染会明显卡顿,尤其低端安卓机。关键不是“能不能解析”,而是“要不要一次性全载”。

真实项目该这么做:

  • 拆分数据源:用扁平化数组(id/pid/name)代替嵌套结构,体积小 30%+,查找可用 Map 预建索引
  • 懒加载:首页只 import 省份列表;用户点开某省,再 import('./areas/shanghai.json') 动态加载该省数据
  • 缓存策略:uni.getStorageSync('area_cache') 存一次,后续直接读,避免重复解析
  • 别在 onLoad 里同步 JSON.parse 大文件,改用 setTimeout(() => {...}, 0) 让出主线程

最易被忽略的一点:JSON 文件本身别放 /static 下用 require 加载——uniapp 会把它当资源拷贝,失去 tree-shaking 和按需加载能力;应该放在 /common/data 下,走模块导入流程。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

3023

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

6603

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

7450

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

7378

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

1043

5

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2355

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3862

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1276

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

4499

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习