# jsontutorial **Repository Path**: walker95/jsontutorial ## Basic Information - **Project Name**: jsontutorial - **Description**: Milo Yip的json教程练习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-01-04 - **Last Updated**: 2022-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 记录leptjson项目学习 ## 2022.1.6 提交 tutorial01, 自己的解答 - 修正关于`LEPT_PARSE_ROOT_NOT_SINGULAR`的单元测试,若`json`在一个值之后,空白之后还有其它字符,则要返回`LEPT_PARSE_ROOT_NOT_SINGULAR` 在函数`int lept_parse()`中添加判断解析待解析的字符串json中是否只留下`'\0'`并且不是无效值`LEPT_PARSE_INVALID_VALUE`, 就可确定为`LEPT_PARSE_ROOT_NOT_SINGULAR` ```c int lept_parse(lept_value *v, const char *json) { //...原有的代码 int lept_value_now = lept_parse_value(&c, v); lept_parse_whitespace(&c);// 清除'\0'前的所有字符 if(c.json[0] != '\0' && lept_value_now != LEPT_PARSE_INVALID_VALUE){ //因为无效值没有清除 v->type = LEPT_NULL; // 解析出错, lept_type为null return LEPT_PARSE_ROOT_NOT_SINGULAR; } else return lept_value_now; } ``` - 参考`test_parse_null()`,加入`test_parse_true()`, `test_parse_false()`单元测试。 ```c static void test_parse_true() { lept_value v; v.type = LEPT_FALSE; EXPECT_EQ_INT(LEPT_PARSE_OK, lept_parse(&v, "true")); EXPECT_EQ_INT(LEPT_TRUE, lept_get_type(&v)); } static void test_parse_false() { lept_value v; v.type = LEPT_NULL; //因为一false, 返回为LEPT_FALSE,所以一开始不能为LEPT_FALSE EXPECT_EQ_INT(LEPT_PARSE_OK, lept_parse(&v, "false")); EXPECT_EQ_INT(LEPT_FALSE, lept_get_type(&v)); } ``` - 参考`lept_parse_null()`的实现和调用方,解析`true`和`false`值。 ```c static int lept_parse_true(lept_context *c, lept_value *v) { EXPECT(c, 't'); if (c->json[0]!='r' || c->json[1]!='u' || c->json[2]!='e') return LEPT_PARSE_INVALID_VALUE; c->json += 3; v->type = LEPT_TRUE; return LEPT_PARSE_OK; } static int lept_parse_false(lept_context *c, lept_value *v) { EXPECT(c, 'f'); if (c->json[0]!='a' || c->json[1]!='l' || c->json[2]!='s' || c->json[3]!='e') return LEPT_PARSE_INVALID_VALUE; c->json += 4; v->type = LEPT_FALSE; return LEPT_PARSE_OK; } ``` ## 2022.3.8提交tutorial03