some structure grammar parser
读到第一个字符后就能确定后面如何解析
- 遇到一个左花括号{时,那么从当前字符开始就需要解析出一个对象,而解析对象的过程则是解析出多对 key/value,每解析完一对,如果你遇到了右花括号},则对这个对象的解析就结束了,而如果遇到的不是右花括号,则你需要解析下一对 key/value,直到遇见右花括号。而解析出一对 key/value,则是必须先解析出一个字符串,然后一个冒号:,然后是这个 key 对应的值。
- 遇到一个左方括号([)时,你需要从这个字符开始解析出一个数组;而解析数组,则是解析出多个由逗号分隔的值,直到解析完一个值后遇到的不是逗号而是右方括号(]),则这个数组解析完毕。
- 遇到一个双引号(")时,则需要从当前位置开始解析出一个字符串。
- 遇到字母 “n” 的话,则是从当前位置开始往后读 4 个字符,且读到的 4 个字符组成的字符串必须是“null”,否则就应该报错。
- 遇到字母 “t” 的话,则是从当前位置开始往后读 4 个字符,且读到的 4 个字符组成的字符串必须是“true”,否则就应该报错。
- 遇到字母 “f” 的话,则是从当前位置开始往后读 5 个字符,且读到的 5 个字符组成的字符串必须是“false”,否则就应该报错。
- 剩下的就是数字了,数字还分整数和浮点数,这里目前只讨论整数。
代码逻辑:递归调用
- 封装类
- 处理空白,支持转义字符,unnicode转义符\u6211
- 做json序列器
- 做json格式化输出器