Android JSON解析总结

发布时间:2026/11/4 15:32:49

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;}
延伸阅读

更多相关文章

2026/11/4 15:32:49

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:32:49

Java——数据类型与变量

/* 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:32:49

Vulkan 着色器语言怎么选?GLSL、HLSL 还是 Slang

Vulkan 着色器语言怎么选?GLSL、HLSL 还是 Slang 【免费下载链接】Vulkan C examples for the Vulkan graphics API 项目地址: https://gitcode.com/gh_mirrors/vu/Vulkan 对于刚上手 Vulkan 图形 API 的开发者,第一个绕不开的问题是着色器语言选…

2026/11/4 16:27:59

09-06-内存-资源泄漏检测与治理

资源泄漏检测与治理篇章:09-核心技术-内存管理篇 | 阅读时间:约 40 分钟 | 前置知识:了解 Unity 资源系统和 GC 基本概念一、引言资源泄漏是 Unity 项目中最隐蔽的内存问题。泄漏的资源在被完全释放前,会持续占用内存并增加 GC 压…

2026/11/4 16:27:58

中小学用车:家校通解决的是交接责任,不是车

中小学用车:家校通解决的是交接责任,不是车 孩子上车之后那几分钟,家长真正想知道的不是“车在哪”,而是“他到了没、谁接的”。 这两件事不一样。实时定位告诉你车在什么位置;交接记录告诉你孩子在几点几分被谁交到了…

2026/11/4 16:27:58

医院职工通勤:七点到岗、夜班交接与停车难题

医院职工通勤:七点到岗、夜班交接与停车难题 医院排班表上有一栏永远空着:员工怎么到岗。 门诊八点开诊,行政九点上班,病房三班倒,急诊和手术室二十四小时。四种时间表在同一个院子里跑。护士七点半交接班,…

2026/11/4 16:27:58

我终于把仓库先进先出问题管明白了!

仓库管理最头疼的事是什么? 不是货太多,而是明明早入库的物料还堆在货架上,新到的物料却已经领走了;账面显示库存充足,盘点时才发现,老批次积压、新批次先用,有些物料甚至放到过期都没人发现。 …

2026/11/4 16:27:58

西门子840D系统常见报警代码速查手册(精华版)

西门子840D系统功能强大,但其复杂的报警体系也给现场维修带来挑战。本文整理了实际维修中最高频出现的20余个报警代码,帮助维修人员快速定位故障方向。 一、NC单元相关报警 报警代码含义快速诊断解决方向3000急停激活检查急停按钮、安全回路解除急停信…

2026/11/4 16:22:57

DSH降版本(命令行/Web 端)

第一步:清理 DSH 的数据目录(最关键)你所有出问题的插件配置、profile 残留,都在这个目录里:bashrmdir /s /q C:\Users\xysoft59\.dsh第二步:清理 npm 缓存(可选,但建议做&#xff0…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* 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 0:03:20

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

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

2026/11/4 0:03:20

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

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

2026/11/4 0:03:20

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

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

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑