12. 数据解析-索引与概述

2025/5/2 Android 开发基础

第 11 章 完成了"把数据拿回来"——但拿到手的只是 JSON/XML 字符串,UI 需要的是对象。中间这一步就是数据解析:字符串 → 对象叫反序列化(读),对象 → 字符串叫序列化(写),二者合称数据绑定。

# 一、解析在整条链路中的位置

数据解析总览示意图

两个要点:

  1. 解析发生在子线程:网络回调本身就在 OkHttp 的线程里,大 JSON(几百 KB)的解析同样耗时,解析完才切主线程更新 UI(呼应 10 章异步篇)。Retrofit + GsonConverter 会自动完成这一切。
  2. 序列化与反序列化用同一套库:Retrofit 的 @Body 提交对象时,Gson 自动把它序列化成 JSON——所以 12.01 学的 Gson 是"读写双向"的。

# 二、JSON 与 XML:两大格式

对比 JSON XML
体积 小(无标签开销) 大(成对标签)
可读性 高 高(属性/命名空间表达力强)
解析成本 低(现代库直接映射对象) 需要事件/树遍历
Android 生态 服务端接口事实标准 Android 系统资源格式(layout/manifest)、部分老接口、RSS
解析库 Gson / Moshi / kotlinx.serialization / org.json XmlPullParser(内置)/ DOM / SAX

结论:接口数据无脑选 JSON;XML 主要出现在"读 Android 自己的资源"和少数老接口/RSS 场景。

# 三、本章分节导览

  • 12.00 索引与概述(本文):解析链路全景与格式选型
  • 12.01 JSON 解析:Gson 全套用法(fromJson/toJson、TypeToken、@SerializedName)、常见坑(字段缺失/泛型擦除/Date)、org.json 与其他库对比
  • 12.02 XML 解析与数据模型设计:DOM/SAX/Pull 三种解析器对比与 XmlPullParser 实战
  • 12.03 数据模型(DTO)设计:DTO/VO 分层架构图、七条设计原则与完整优秀实践案例、反例对照
  • 12.04 图片加载:Bitmap 内存计算与 OOM 根源、Glide 全套用法与三级缓存管线、列表复用错图问题、Coil 对比

# 结束

本节建立了数据解析的全局认知:反序列化/序列化在"网络字节流 → UI 对象"链路中的位置(配图)、解析须在子线程、JSON 与 XML 的生态分工。下一节进入 JSON 主角:12.01 JSON 解析。