simple json parser.
代码查看:
package data.json;
public enum JsonTokenType {
STRING,
NUMBER,
LEFTBRACKET, //[
RIGHTBRACKET,
LEFTbrace, // {
RIGHTbrace,
EOF,
COMMA,
COLON;//:
}
package data.json;
public class Token {
JsonTokenType type;
String value;
public Token(JsonTokenType type, String value) {
this.type = type;
this.value = value;
}
public Token(JsonTokenType type, char c) {
this.type = type;
this.value = c+"";
}
public String toString() {
return String.format("Token({%s}, {%s})", type, value);
}
}
这是最基本的词法的类。词法分析和语法分析的代码又丑又长(可能是因为用Java的基本类型写的,没有借助高级的工具类的缘故),没有贴出来,可以去网站查看。都利用递归下降法(llk),最后生成数据结构。
要理解这些代码必须明白里面的原理,对编译原理实现有一点了解,然后就懒得写这种代码了。因为很繁琐,必须去操心细节的事情,操碎心。
也许很多人喜欢写这种代码,理解起来有一定的要求,调试相对困难,仿佛回到开始写小算法时的激动心情。因为大多数日常工作有很多配置,很少一上来写几百行高度逻辑复杂的代码(用很多判断 循环 递归 做类型转换)。如果一旦增加新的功能,设计的不好,改起来会让人很崩溃。
json官网
现在不够完整,但基本功能可以实现。做了语法解析,生成Java对象(暂时不是bean,是基本类型和list和map),利用tostring进行输出(强烈推荐看看源码)。后续可以增加xml互转功能。
目前Java的xml和json解析库真是一团糟,实在可以用错误百出,难以使用来形容。为什么接受正规教育的程序员这么少,这么难找。比较常用的有好几种之多,我见过项目混用Google的,Apache的,ali的解析jar包。
为什么会如此复杂,这我也不知道。
json只是之一,不是唯一,且行且珍惜。如果你把世界当成一个钉子,请砸的轻一点。上点年龄的程序员喜欢xml,这里有一篇XML解析想到的。
看看Java自带的简单类型解析器
import java.util.*;
public class Main {
public static void main(String args[]) { Scanner cin = new Scanner(System.in);
int a, b;
while (cin.hasNext()) {
a = cin.nextInt();
b = cin.nextInt();
System.out.println(a + b);
}
}
}
这其实是很多oj的第一道试题答案,Java版的操作std io。作为工具类,提供了必要的方法,来识别基本类型。Java也有工具类来解析Java代码自身,如一些代码检查工具。
有的知识点在盲区里面,如果新手不接触就会很害怕,觉得很难,无从下手。有经验的熟手会快速入门,高手当然会理解更多的东西。
各种语言都提供了很多高度可用的工具,让我们专心业务,如果我们不能理解他,起码暂时需要用好它。看看一些优秀的工具实现都引入了更多的其他工具,在追求理解基本思想和功能的时候,做出自己的系统才是重要的。
我当然是不会用这个解析器去做生产环境的任何事情,这只是玩具版,企业应用需要防弹合金版本。