尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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;}
RELATED

相关推荐

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:59
MIPI与SerDes技术对比:车载高速数据链路设计核心解析

MIPI与SerDes技术对比:车载高速数据链路设计核心解析

/* 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:26:56
电机控制源码阅读指南:从零到无感FOC的项目选型与实战

电机控制源码阅读指南:从零到无感FOC的项目选型与实战

/* 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:26:56
MORE NEWS

更多资讯

📰

如何判断一台电池测试设备的测试结果到底可不可信?

我们需要回到一个最核心的问题:测试设备测出来的数据,到底能不能相信?这是所有测试设备工程工作的最终落点。一、第一步:确认测试方法首先要问:我们到底在测什么?使用什么方法?测试条件是什么&a…

📰

一期一会 | 什么是电源完整性?

电源完整性(PI)属于电子工程领域,专注于确保电子系统的电源输送网络(PDN)在整个系统中可以有效地提供稳定的电源。为了可以正常工作,印刷电路板(PCB)、集成电路(IC&#…

📰

Linux 进程(二) 深入理解进程

目录 一. 理解系统调用 二. 理解库函数 三. 理解进程 3.1 初步了解进程 3.2 描述进程: PCB(进程控制块) 3.2.1 task_struct 包含的核心内容 3.3 组织进程 3.4 查看进程 3.4.1 getpid 和 getppid 代码示例: 3.4.2 ps 代码示例: 3…

📰

【三个月 AI Agent 实战学习】Day 56:作品集整合 —— 个人 AI Agent 作品集网站与项目演示脚本

Day 56:作品集整合 —— 个人 AI Agent 作品集网站与项目演示脚本 欢迎来到第五十六天!过去三天我们完成了简历和两轮模拟面试。但简历和面试只是“说”,面试官和招聘方还需要“看”——他们想看你的代码、项目演示、架构图。今天我们将把你…

📰

海事网关连接船载受控网络与岸端平台:安全边界与数据发布架构设计

摘要: 船载受控网络连接岸端平台,不应被简单设计成一条“船端内网到公网”的链路。岸端可能需要设备状态、告警、文件、API和远程维护能力,而这些需求对应的网络权限并不相同。海事网关设计的重点,是把船端主动发布、对外服务和岸…

📰

生成式对抗网络GAN(Generative Adversarial Network)

network作为generator生成更加复杂的distribution,应该怎么做?这是我们这节课要讨论的问题generative model适用于哪些场景呢?简单来说,就是输出需要一些“创造力"的时候,例如绘画,聊天机器人等在norm…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬