Android 学习笔记(7)之JSON序列化

JSON
1. 读写速度快
2. 解析简单
3. 轻量级
4. 独立于语言,平台
5. 具有自我描叙性

JSON解析方式
1Android Studio自带org.json解析
基于文档驱动  需要把全部文件读入到内存中  然后遍历所有数据,根据需要检索想要的数据
2 Gson 解析gson.toJson、gson.fromJson
基于事件驱动
根据所需取的数据 建立1个对应于JSON数据的JavaBean类,即可通过简单操作解析出所需数据
按需取数据
3,Jackson解析 ObjectMapper objectMapper = new ObjectMapper()
objectMapper.writeValue/readValue
基于事件驱动
GSON可按需解析,即创建的JavaBean类不一定完全涵盖所要解析的JSON数据,按需创建属性
Jackson解析对应的JavaBean必须把Json数据里面的所有key都有所对应,即必须把JSON内的数据所有解析出来,无法按需解析

4,Fastjson解析 (阿里巴巴)
writeJSONStringTo/parseObject
Gson原理解析
gson.toJson 可以基本类型和字符串以及他们数组
一般是对象gson.toJson(gsonBean);
gson.fromJson (json,GsonBean.class)

JsonElement
JsonObject,JsonArray,JsonPrimitive,JsonNull都是JsonElement这个抽象类的子类

5,Gson解析异常
Gson解析常见的错误
Expected BEGIN_ARRAY but was STRING at line 1 column 27
这种错误一般都是原来是一个字段需要是数组类型,但是事实上给的是"",导致的
1. 让返回null即可解决问题
2. 用Gson自带的解决方案
6,自定义JSON解析库
一个方法 输入的是表示JSON的字符串(自定义) 输出的是对应的数据结构(如Bean)
词法分析和语法分析两个阶段
Token流 比如 { , 字符串, : , [, ]
词法分析  词法分析阶段的目标是按照构词规则将 JSON 字符串解析成 Token 流  得到一组Token流 例如   {key : value, }
语法分析  根据 JSON 文法(比如文法是要求非空键值对)检查上面 Token 序列所构成的 JSON 结构是否合法

1. 通过词法分析是将字符串解析成一组 Token 序列
2. 然后通过语法分析检查输入的 Token 序列所构成的 JSON 格式是否合法
词法分析:
枚举类型  TokenType
- BEGIN_OBJECT({)
- END_OBJECT(})
- BEGIN_ARRAY([)
- END_ARRAY(])
- NULL(null)
- NUMBER(数字)
- STRING(字符串)
- BOOLEAN(true/false)
- SEP_COLON(:)
- SEP_COMMA(,)

除了要将某个词的类型保存起来,还需要保存这个词的字面量
定义Token类
public class Token {
    private TokenType tokenType; //类型
    private String value;  //字面量
    // 省略不重要的代码
}
词法分析  case 'n':
                return readNull();
就是判断n 后面字符是不是u,l,l
其他readBoolean类似
语法分析 
Token 序列作为输入,输出 JSON Object 或 JSON Array
JsonObject 和 JsonArray

parseJsonObject 方法解析流程
1. 读取一个 Token,检查这个 Token 是否是其所期望的类型
2. 如果是,更新期望的 Token 类型。否则,抛出异常,并退出
重复上面流程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值