c語言的后臺在解析json時(shí),需要用到一些第三方庫或者自己編寫的解析函數(shù)。下面介紹一些比較常見的解析方法。
/* cJSON解析json */ cJSON *root = cJSON_Parse(json_string); if (!root) { printf("Error before: %s\n", cJSON_GetErrorPtr()); } ... /* jsmn解析json */ jsmn_parser parser; jsmntok_t tokens[MAX_TOKENS]; /* 初始化json解析器 */ jsmn_init(&parser); /* 解析json并返回token個(gè)數(shù) */ int token_count = jsmn_parse(&parser, json_string, strlen(json_string), tokens, MAX_TOKENS); /* 遍歷tokens并獲取對應(yīng)的值 */ for (int i = 0; i< token_count; i++) { jsmntok_t *t = &tokens[i]; if (t->type == JSMN_OBJECT) { ... } else if (t->type == JSMN_ARRAY) { ... } else if (t->type == JSMN_STRING) { ... } else if (t->type == JSMN_PRIMITIVE) { ... } } /* RapidJSON解析json */ rapidjson::Document document; document.Parse(json_string); if (document.HasParseError()) { printf("JSON parse error: %s\n", document.GetParseError()); } /* 獲取json中對應(yīng)的值 */ if (document.IsObject() && document.HasMember("name")) { const rapidjson::Value& name_value = document["name"]; if (name_value.IsString()) { std::string name = name_value.GetString(); printf("name: %s\n", name.c_str()); } }
有了上面的解析方法,我們就可以在c語言的后臺中輕松解析json并獲取其對應(yīng)的值了。