简单json解析器(Java)

图片发自简书App


simple json parser.

代码查看:

json解析代码



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官网

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代码自身,如一些代码检查工具。

  有的知识点在盲区里面,如果新手不接触就会很害怕,觉得很难,无从下手。有经验的熟手会快速入门,高手当然会理解更多的东西。

  各种语言都提供了很多高度可用的工具,让我们专心业务,如果我们不能理解他,起码暂时需要用好它。看看一些优秀的工具实现都引入了更多的其他工具,在追求理解基本思想和功能的时候,做出自己的系统才是重要的。

 我当然是不会用这个解析器去做生产环境的任何事情,这只是玩具版,企业应用需要防弹合金版本。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,293评论 18 399
  • 不管生活还是工作,我都没有刻意计划过什么。杜鹃
    小心情_49f4阅读 117评论 0 0
  • 继续练习禅绕画中线条的运用。白天和家人一起去东莞松山湖玩,南方的冬天真美艳,温暖如春!第一次见荔枝树、青枣树。
    王的影子阅读 195评论 0 2
  • 今天我无意间在朋友圈看到蒋甲的视频,他是一个挑战自己,尝试100次被拒绝的勇敢的人。 这篇文章让我非常触动,我立刻...
    家庭治疗师李金岂阅读 590评论 0 50