json-tutorial
json-tutorial copied to clipboard
有加入一个解析错误的数据类型必要吗?
//我的代码加入了LEPT_ERROR,只要不能正确解析,就设置这个类型
typedef enum
{
LEPT_NULL, LEPT_FALSE, LEPT_TRUE, LEPT_NUMBER,
LEPT_STRING, LEPT_ARRAY, LEPT_OBJECT, LEPT_ERROR
}lept_type;
我觉得这个是很正常的想法,但是看了一圈下来,没有发现这样实现的。 为什么呢?
不是已经有各种具体的解析错误作为返回值了吗,干嘛还要加这样一个?
没有必要,miloyip老师的教程针对各种错误情况定制了返回错误码,非常详尽。
你这样实现,需要加入额外的检测代码(lept_type
是否为 LEPT_ERROR
等等),并且错误信息不详。
解析报错的思路应该是:一旦解析错误,说明JSON字符串不合法,中断解析,返回错误码。不需要为节点专门设置一个错误类型。
喵自己为了图省事,没有定制那么多错误码,大部分的解析错误都直接返回LEPT_PARSE_INVALID_VALUE
...
用一个类型标识 unexpected 结构在 parser 中并非完全没用。如开发 IDE,需要正确处理不完整的结构,这样的结构是不能编译的,但是需要给出自动完成的提示,以及正常处理后续的合法结构,更不能中途出错就放弃后续 tokens 不管……当然这是 in general 的一种情况,一般的 parser 只单纯处理好 ok/error 就行了。我猜这也不是 JosanSun 的本意,但 parser 技术不只有一种用途。