예제 #1
0
파일: test.c 프로젝트: voidrank/cJson
int TestSomeFuncs() {
	
	int score = 10;
	
	// 调用同学们实现的接口
	JSON *root = CreateObject();
	// 评测1 是否能正确创建Object
	if (root->type != JSON_OBJECT) { // 类型不对
		score -= 2;
	}
	
	AddItemToObject(root, "name", CreateString("Hello World"));
	// 评测2 是否能正确AddItemToObject并且读取
	JSON *value = GetItemInObject(root, "name");
	// 类型不对或者值不对
	if (value->type != JSON_STRING || strcmp(value->valuestring, "Hello World")) {
		score -= 2;
	}
	
	JSON *array = CreateArray();
	AddItemToArray(array, CreateBool(0));
	AddItemToArray(array, CreateNumber(2.3));
	// 评测3 是否能正确AddItemToArray并且读取
	JSON *item = GetItemInArray(array, 1);
	if (item->type != JSON_NUMBER || item->valuedouble != 2.3) {
		score -= 2;
	}
	
	AddItemToObject(root, "array", courses);
	// 现在root的状态
	/*
	{
		"name": "Hello Wrold",
		"array": [
			false,
			2.3
		]
	}
	*/
	
	// 评测4 是否能正确地根据路径读取值
	item = GetItemInJSON(root, "/array/0");
	if (item->type != JSON_FALSE) {
		score -= 2;
	}
	
	PrintJSONToFile(root, "test.json");
	// 评测5 是否与标准答案文件相同
	if (!IsSame("test.json", "test.json.ans")) {
		score -= 2;
	}
	return score;
}
예제 #2
0
파일: JSON.c 프로젝트: JoshOY/C-JSON-joshoy
JSON *Duplicate(JSON *item, int recurse)
{
    JSON         *rtn  = NULL;
    JSON         *iter = NULL;
    unsigned int  i    = 0;

    if (item == NULL) {
        printf("Exception: Cannot duplicate a NULL JSON pointer.\n");
        return rtn;
    }
    switch (item->type) {
    case JSON_NULL:   rtn = CreateNULL();                    return rtn;
    case JSON_FALSE:  rtn = CreateFalse();                   return rtn;
    case JSON_TRUE:   rtn = CreateTrue();                    return rtn;
    case JSON_NUMBER: rtn = CreateNumber(item->valuedouble); return rtn;
    case JSON_STRING: rtn = CreateString(item->valuestring); return rtn;

    case JSON_ARRAY:
        rtn = CreateArray();
        if (recurse == 1) {
            iter = item->childstart;
            for (i = 0; i < item->childlength; ++i) {
                AddItemToArray(rtn, Duplicate(iter, 1));
                iter = iter->next;
            }
        }
        else {
            rtn->childlength = item->childlength;
            rtn->childstart = item->childstart;
            rtn->childend = item->childend;
        }
        return rtn;

    case JSON_OBJECT:
        rtn = CreateObject();
        if (recurse == 1) {
            iter = item->childstart;
            for (i = 0; i < item->childlength; ++i) {
                AddItemToObject(rtn, iter->key, Duplicate(iter, 1));
                iter = iter->next;
            }
        }
        else {
            rtn->childlength = item->childlength;
            rtn->childstart = item->childstart;
            rtn->childend = item->childend;
        }
        return rtn;
    }

}
예제 #3
0
JSON *array_type_parse(){
    JSON *arr_obj = CreateArray();
    next_char();
    next_non_space_char();
    while (str_value() != ']'){
        AddItemToArray(arr_obj, non_type_parse());
        next_non_space_char();
        if (str_value()==','){
            next_char();
        }
    }
    next_char();
    return arr_obj;
}
예제 #4
0
파일: JSON.c 프로젝트: JoshOY/C-JSON-joshoy
JSON *ParseJSON(const char *value)
{
    JSON       *rtn               = NULL;
    StrSlice   *ss                = NULL;
    StrSlice   *iter              = NULL;
    int         len               = strlen(value);
    int         index             = 0;
    char       *value_deletespace = DeleteSpaces(value);

    switch(value[0]) {
    case '-':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
    case '0':
        //To number
        return CreateNumber(FormatNumber(value_deletespace));
        free(value_deletespace);
        break;

    case '\"':
        // To string
        return CreateString(FormatString(value));
        break;

    case '{':
        rtn  =  CreateObject();
        ss   =  GetObjectSlices(value);
        iter =  ss;
        if (ss->length == 0) {
            DeleteStrSlice(ss);
            return rtn;
        }
        while (iter != NULL) {
            AddItemToObject(rtn, FormatString(iter->str), ParseJSON(DeleteSpaces(iter->next->str)));
            iter = iter->next->next;
        }
        DeleteStrSlice(ss);
        return rtn;
        break;

    case '[':
        rtn  =  CreateArray();
        ss   =  GetArraySlices(value);
        iter =  ss;
        if (ss->length == 0) {
            DeleteStrSlice(ss);
            return rtn;
        }
        while (iter != NULL) {
            AddItemToArray(rtn, ParseJSON(DeleteSpaces(iter->str)));
            iter = iter->next;
        }
        DeleteStrSlice(ss);
        return rtn;
        break;

    case 'n':
        if (strcmp(value_deletespace, "null") == 0) {
            free(value_deletespace);
            return CreateNULL();
        }
        else {
            printf("Exception: Invalid Syntax \"%s\"", value);
            return NULL;
        }

    case 't':
        if (strcmp(value_deletespace, "true") == 0) {
            free(value_deletespace);
            return CreateTrue();
        }
        else {
            printf("Exception: Invalid Syntax \"%s\"", value);
            return NULL;
        }
        break;

    case 'f':
        if (strcmp(value_deletespace, "false") == 0) {
            free(value_deletespace);
            return CreateFalse();
        }
        else {
            printf("Exception: Invalid Syntax \"%s\"", value);
            return NULL;
        }
        break;
    }
}