首页/新闻资讯/正文详情

Android JSON解析总结

发布时间:2026/11/4 15:31:30 来源:云帆数科 栏目:资讯中心
Android JSON解析总结
文章目录Android JSON解析总结概述语法使用Android的org.json处理生成JSON解析JSONAndroid JSON解析总结概述JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式语法JSON有2种结构对象ObjectJSON中的对象表示为花括号{}中的键值对集合。键和值之间用冒号:连接键值对之间用逗号,连接。数组ArrayJSON中的数组表示为方括号[]中的值列表。数组元素之间用逗号,连接。语法上的硬性约束写手写 JSON 时最容易踩键必须用双引号包裹不能用单引号最后一个元素不能有尾随逗号标准 JSON不支持注释值只能是string / number / boolean / null / object / array六种不支持undefined、不支持NaN、Infinity。使用Android的org.json处理数据类publicclassStudent{Stringname;intage;Stringsex;publicStudent(Stringname,intage,Stringsex){this.namename;this.ageage;this.sexsex;}}publicclassSchool{Stringteacher;intschoolRanking;ListStudentstudents;publicSchool(Stringteacher,intschoolRanking,ListStudentstudents){this.teacherteacher;this.schoolRankingschoolRanking;this.studentsstudents;}}生成JSONprivatevoidtoJson()throwsJSONException,IOException{JSONObjectschoolObjectnewJSONObject();// 坑1put(String, Object) 传入 null 时等价于删除该 key字段会直接消失// 要显式写 null 必须用 JSONObject.NULLschoolObject.put(teacher,school.teacher!null?school.teacher:JSONObject.NULL);schoolObject.put(schoolRanking,school.schoolRanking);JSONArraystudentArraynewJSONArray();// 坑2集合为 null 时直接 foreach 会 NPEif(school.students!null){for(Studentstudent:school.students){JSONObjectstudentObjectnewJSONObject();studentObject.put(name,student.name!null?student.name:JSONObject.NULL);studentObject.put(age,student.age);studentObject.put(sex,student.sex!null?student.sex:JSONObject.NULL);studentArray.put(studentObject);}}schoolObject.put(students,studentArray);// 坑3getBytes() 不带字符集依赖平台默认编码必须显式指定 UTF-8// 坑4原写法未用 try-with-resources / finally异常时流不会关闭try(OutputStreamoutputStreamnewBufferedOutputStream(newFileOutputStream(newFile(getCacheDir(),test.json)))){outputStream.write(schoolObject.toString().getBytes(StandardCharsets.UTF_8));}}解析JSONprivateSchoolparseJson()throwsJSONException,IOException{FilefilenewFile(getCacheDir(),test.json);JSONObjectjsonObjectnewJSONObject(readText(file));// 坑5getString / getInt 在字段缺失或类型不符时直接抛 JSONException// 字段不确定的场景优先用 optXxx(key, 默认值)StringteacherjsonObject.optString(teacher,);intschoolRankingjsonObject.optInt(schoolRanking,-1);JSONArraystudentsArrayjsonObject.optJSONArray(students);ListStudentstudentsnewArrayList();if(studentsArray!null){for(inti0;istudentsArray.length();i){JSONObjectstudentObjectstudentsArray.optJSONObject(i);if(studentObjectnull)continue;StringnamestudentObject.optString(name,);intagestudentObject.optInt(age,0);StringsexstudentObject.optString(sex,);students.add(newStudent(name,age,sex));}}returnnewSchool(teacher,schoolRanking,students);}privatestaticStringreadText(Filefile)throwsIOException{StringBuilderbuildernewStringBuilder();// 坑6FileReader 无法指定字符集必须换成 InputStreamReader UTF-8try(ReaderreadernewBufferedReader(newInputStreamReader(newFileInputStream(file),StandardCharsets.UTF_8))){// 坑7原示例缓冲区只有 3 个字符会产生大量无谓的 IO用 8KBchar[]buffernewchar[8*1024];intlen;while((lenreader.read(buffer))!-1){builder.append(buffer,0,len);}}Stringjsonbuilder.toString();// 坑8带 UTF-8 BOM 的文件会让 new JSONObject(json) 直接抛 JSONException先去掉 BOMif(!json.isEmpty()json.charAt(0)\uFEFF){jsonjson.substring(1);}returnjson;}

相关推荐

ESP32-S3实现AI硬件闭环:从代码到物理动作的实战指南
ESP32-S3实现AI硬件闭环:从代码到物理动作的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 15:31:30

从Laplace变换到CModule:传递函数与频域滤波的工程实现
从Laplace变换到CModule:传递函数与频域滤波的工程实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 15:30:23

2026年9月20日秋季复盘:抓住100天窗口,制定年度冲刺计划
2026年9月20日秋季复盘:抓住100天窗口,制定年度冲刺计划

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 15:30:23

SolidWorks Routing中文界面英文面板排查
SolidWorks Routing中文界面英文面板排查

简介:这份 docx 文档面向使用 SolidWorks Routing 进行管道与管路设计、却因界面显示英文而影响操作效率的工程师与自学者,聚焦 Routing 模块中英文界面切换这一常见问题,整理出可对照排查的解决思路。压缩包内仅含 1 个 docx 文件&#xff0… · 2026/11/4 20:08:48

红酒数据集数据分析大作业:相关性、回归与KNN分类全流程
红酒数据集数据分析大作业:相关性、回归与KNN分类全流程

简介:围绕红酒数据集展开的数据分析大作业文档,面向统计学、数据科学课程学习者及需要完成课程设计的本科生,聚焦红酒评分影响因素与分类标准的建模分析。压缩包内共1个docx文件,约202KB,以实验报告形式组织&#xff0… · 2026/11/4 20:08:48

江苏河流湖泊县域高速shp数据实战:坐标系、拓扑与叠加分析全解析
江苏河流湖泊县域高速shp数据实战:坐标系、拓扑与叠加分析全解析

简介:面向GIS初学者、地理信息专业学生及区域规划研究者的江苏省矢量地理数据包,以Shapefile标准格式整理,可用于地图制作、空间分析与专题制图练习。压缩包共83个文件,约974KB,涵盖shp几何数据、dbf属性表、shx索引及… · 2026/11/4 20:08:48

04741计算机网络原理190道填空题清洗、索引与自测
04741计算机网络原理190道填空题清洗、索引与自测

简介:这套《04741计算机网络原理填空题及答案》面向备考自考 04741 及复习计算机网络基础的学生,聚焦填空题型中的概念辨析、协议缩写与关键术语记忆,帮助解决知识点零散、临考查漏难的问题。内容围绕 OSI 七层模型与 TCP/IP 体系展开&#x… · 2026/11/4 20:07:46

500个JavaScript效果源码包:前端练手与组件拆解实战指南
500个JavaScript效果源码包:前端练手与组件拆解实战指南

简介:这份资源面向前端初学者与希望夯实原生 JavaScript 功底的开发者,汇集了 500 余个可直接运行的网页效果实例,覆盖 DOM 操作、事件处理、动画过渡、表单验证、AJAX 通信、响应式布局、Canvas 绘图、拖放与本地存储等常见开发场景&#xf… · 2026/11/4 20:07:46

LiDAR360激光点云数据处理:航带拼接、分类滤波与行业成果生产
LiDAR360激光点云数据处理:航带拼接、分类滤波与行业成果生产

简介:这份《LiDAR360激光雷达点云数据处理软件用户手册》面向测绘、林业调查、电力巡检等领域的技术人员与三维激光点云初学者,系统解答软件从安装激活到各功能模块使用的问题。手册以航带拼接、数据管理、统计、分类、地形、机载林业、地基林业、电力线… · 2026/11/4 20:07:46

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码