Java实现自己的Json解析器——Json字符串解析原理

本文介绍如何使用Java实现一个简单的Json解析器,解析JSON字符串并转化为JsonObject和JsonArray。解析过程包括提取字符、解析数字、字符串、布尔值、null以及Json对象和数组,同时探讨了在大数据量场景下的优化策略。
摘要由CSDN通过智能技术生成

概述

附上完整的代码:
https://pan.baidu.com/s/1dEDmGz3
(入口类是Json)

JSON:JavaScript 对象表示法(JavaScript Object Notation)。

JSON 是存储和交换文本信息的语法。类似 XML。

JSON 比 XML 更小、更快,更易解析。

在JSON中,分为6种对象:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(JsonArray)
  • 对象(JsonObject)
  • null

基本对象的实现

JsonObject其实就是一个HashMap,JsonArray其实就是一个ArrayList.

public class JsonObject extends HashMap<String,Object> {
   

}
public class JsonArray extends ArrayList<Object> {
   

}

JSON字符串的解析

以这个字符串为例:

{“success”:true,”id”:-10.5,”employees”:[{“firstName”:”Bill”,”lastName”:”Gates”},{“firstName”:”George”,”lastName”:”Bush”},{“firstName”:”Thomas”,”lastName”:”Carter”}]}

我们保证在只扫描一次整个的情况下,就将json结构解析成功。

传统的解析策略通常是通过词法分析,将json分为一个个的token,而这些token有着自己的类型和值;再通过语法分析构建一棵抽象语法树,进一步处理。通常需要定义一个enum枚举类型表示Token,或者用一个数组来表示Token。

enum表示

public enum TokenType {
    START_OBJ, END_OBJ, START_ARRAY, END_ARRAY, NULL, NUMBER, STRING, BOOLEAN, COLON, COMMA, END_DOC
}

数组表示

   public static final String[] CAST_STRS = { "STR", "NUM", "DESC", "SPLIT",  
            "ARRS", "OBJS", "ARRE", "OBJE", "FALSE", "TRUE", "NIL", "BGN", "EOF" };  

其实根本不需要这么复杂。依我看来,json的token只有五种:true/false/null(归为一种࿰

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值