json-tutorial icon indicating copy to clipboard operation
json-tutorial copied to clipboard

有加入一个解析错误的数据类型必要吗?

Open JosanSun opened this issue 7 years ago • 3 comments

//我的代码加入了LEPT_ERROR,只要不能正确解析,就设置这个类型
typedef enum
{
	LEPT_NULL, LEPT_FALSE, LEPT_TRUE, LEPT_NUMBER,
	LEPT_STRING, LEPT_ARRAY, LEPT_OBJECT, LEPT_ERROR
}lept_type;

我觉得这个是很正常的想法,但是看了一圈下来,没有发现这样实现的。 为什么呢?

JosanSun avatar Jul 28 '17 14:07 JosanSun

不是已经有各种具体的解析错误作为返回值了吗,干嘛还要加这样一个?

ghost avatar Aug 09 '17 02:08 ghost

没有必要,miloyip老师的教程针对各种错误情况定制了返回错误码,非常详尽。 你这样实现,需要加入额外的检测代码(lept_type 是否为 LEPT_ERROR等等),并且错误信息不详。 解析报错的思路应该是:一旦解析错误,说明JSON字符串不合法,中断解析,返回错误码。不需要为节点专门设置一个错误类型。 喵自己为了图省事,没有定制那么多错误码,大部分的解析错误都直接返回LEPT_PARSE_INVALID_VALUE...

zihengCat avatar Aug 30 '17 14:08 zihengCat

用一个类型标识 unexpected 结构在 parser 中并非完全没用。如开发 IDE,需要正确处理不完整的结构,这样的结构是不能编译的,但是需要给出自动完成的提示,以及正常处理后续的合法结构,更不能中途出错就放弃后续 tokens 不管……当然这是 in general 的一种情况,一般的 parser 只单纯处理好 ok/error 就行了。我猜这也不是 JosanSun 的本意,但 parser 技术不只有一种用途。

paladin-t avatar Sep 14 '17 16:09 paladin-t