
前言JSON是 ArkTS 中最常用的数据交换格式。在「猫猫大作战」中JSON 用于游戏数据持久化保存到文件、网络请求数据传输与后端通信、以及深拷贝对象。本文讲解 JSON.stringify 和 JSON.parse 的完整用法。一、序列化 JSON.stringifyconstgameData{score:2450,highScore:5000,cats:[{id:cat_1,level:3,x:2,y:5},{id:cat_2,level:1,x:4,y:3},],gameTime:180,};constjsonStrJSON.stringify(gameData);console.info(jsonStr);// {score:2450,highScore:5000,cats:[...],gameTime:180}// 格式化输出可读性好constprettyJsonJSON.stringify(gameData,null,2);二、反序列化 JSON.parseasyncfunctionloadGameFromFile(path:string):PromiseGameData|null{try{constfilefileIo.openSync(path,fileIo.OpenMode.READ_ONLY);conststatfileIo.statSync(path);constbufnewArrayBuffer(stat.size);fileIo.readSync(file.fd,buf);fileIo.closeSync(file);consttextnewTextDecoder().decode(buf);constdataJSON.parse(text)asGameData;returndata;}catch(err){console.error(读取游戏数据失败:${err.message});returnnull;}}三、JSON 方法对比方法功能返回值异常stringify(obj)对象 → JSON 字符串string循环引用会抛异常parse(json)JSON 字符串 → 对象any格式错误会抛异常stringify(obj, null, 2)格式化输出string同上四、深拷贝对象// 使用 JSON 实现对象的深拷贝constoriginal{score:100,combo:{count:3,multiplier:3}};constcopyJSON.parse(JSON.stringify(original));copy.score200;copy.combo.count5;console.info(original.score);// 100 ✅ 原对象不受影响console.info(original.combo.count);// 3 ✅ 嵌套对象也不受影响五、常见错误错误原因解决JSON.parse 抛异常字符串格式不正确try-catch 包裹JSON.stringify 抛异常存在循环引用删除循环引用或用自定义 replacerundefined 属性丢失JSON.stringify 忽略 undefined先用默认值替换// 安全解析functionsafeParseT(json:string,defaultVal:T):T{try{returnJSON.parse(json)asT;}catch{returndefaultVal;// 解析失败返回默认值}}总结JSON 是 ArkTS 中对象序列化和反序列化的标准方式用于数据持久化和深拷贝。核心要点stringify序列化、parse反序列化、 try-catch 防解析异常、 深拷贝用JSON.parse(JSON.stringify(obj))。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源JSON MDN 文档第 142 篇sandbox-path第 144 篇taskpool第 149 篇ArrayBuffer