java编写解析json_java – 如何编写基本的JSON解析类

这个答案假设您真的想编写一个解析器并准备投入所需的工作.

您必须从JSON的正式规范开始.我找到了http://www.ietf.org/rfc/rfc4627.txt.这准确地定义了语言.您必须实现规范中的所有内容并为其编写测试.你的解析器必须满足不正确的JSON(和你的一样)并抛出异常.

如果你想编写解析器,请停止,思考,然后不要.让它正常工作需要做很多工作.无论你做什么,做一个正确的工作 – 不完整的解析器是一个威胁,永远不应该分发.

你必须编写符合的代码.以下是规范中的一些短语.如果您不理解它们,您将需要仔细研究并确保您理解:

“JSON text SHALL be encoded in Unicode. The default encoding is

UTF-8.”

“A JSON parser MUST accept all texts that conform to the JSON

grammar.”

“编码注意事项:如果是UTF-8则为8位;如果是UTF-16或UTF-32则为二进制

JSON may be represented using UTF-8, UTF-16, or UTF-32. When JSON

is written in UTF-8, JSON is 8bit compatible. When JSON is

written in UTF-16 or UTF-32, the binary content-transfer-encoding

must be used.

“Any character may be escaped. If the character is in the Basic

Multilingual Plane (U+0000 through U+FFFF), then it may be

represented as a six-character sequence: a reverse solidus, followed

by the lowercase letter u, followed by four hexadecimal digits that

encode the character’s code point. The hexadecimal letters A though

F can be upper or lowercase. So, for example, a string containing

only a single reverse solidus character may be represented as

“\u005C”. “

如果您理解这些并且仍然想编写解析器,那么请查看其他解析器,并查看其中是否有任何解析器.借用这些为您自己的应用程序.

如果您仍然热衷于强烈考虑使用解析器生成器.例如JAVACC,CUP和我首选的工具ANTLR. ANTLR非常强大,但很难开始.另请参阅Parboiled的建议,我现在推荐. JSON相对简单,它将是一个有用的练习.大多数解析器生成器生成一个完整的解析器,可以创建可执行代码或生成JSON的解析树.

如果您不允许(或不想)使用解析器生成器,那么您将不得不创建自己的解析器.这通常分为两部分:

词法分析器/标记器.这可以识别语言规范中定义的基本原语.在这种情况下,它必须识别大括号,引号等.它可能还会构建数字的表示.

AbstractSyntaxTree(http://en.wikipedia.org/wiki/Abstract_syntax_tree,AST)生成器.在这里编写代码来汇编表示JSON抽象的树(例如,空格和curlies已被丢弃).

当你有AST时,应该很容易迭代节点并创建你想要的输出.

但编写解析器生成器,即使是像JSON这样的简单语言,也是很多工作.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值