欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c json空格數(shù)據(jù)處理

謝彥文1年前9瀏覽0評論

在使用C語言處理JSON數(shù)據(jù)時(shí),經(jīng)常會(huì)遇到需要處理空格的情況。因?yàn)镴SON數(shù)據(jù)中的空格有時(shí)會(huì)對數(shù)據(jù)的解析造成影響。下面介紹一些處理JSON空格的方法。

首先需要說明的是,在JSON中空格可以放在值的前后、鍵的后面和值的分隔符前后。在編寫代碼時(shí),要格外注意這些位置是否出現(xiàn)了空格。

示例1:
{
"name": "Tom",
"age" : 18,
"sex":"male"
}
示例2:
{
"name":     "Tom"   ,
"age" : 18 ,
"sex":"male"
}

上面兩個(gè)示例都是合法的JSON格式。但是在第二個(gè)示例中,存在值前后有多余空格的情況。如果用C語言讀取該JSON數(shù)據(jù),需要用到j(luò)son-c庫的API,在解析數(shù)據(jù)時(shí)需要用到j(luò)son_object_new_string_nocheck()函數(shù)代替json_object_new_string()函數(shù)。原因是json_object_new_string()函數(shù)會(huì)檢查值的前后是否有空格,而json_object_new_string_nocheck()函數(shù)不會(huì)檢查。

#includeint main()
{
const char *json_str = "{\n"
"    \"name\":     \"Tom\"   ,\n"
"    \"age\" : 18 ,\n"
"    \"sex\":\"male\"\n"
"}";
struct json_object *json_obj = json_tokener_parse(json_str);
printf("name: %s\n", json_object_get_string(json_object_object_get(json_obj, "name")));
printf("age: %d\n", json_object_get_int(json_object_object_get(json_obj, "age")));
printf("sex: %s\n", json_object_get_string(json_object_object_get(json_obj, "sex")));
json_object_put(json_obj);
return 0;
}

在上面的代碼中,json_tokener_parse()函數(shù)用于解析JSON數(shù)據(jù),json_object_get_string()函數(shù)用于獲取字符串類型的值,json_object_get_int()函數(shù)用于獲取整型類型的值,json_object_object_get()函數(shù)用于獲取鍵值。

除了用json_object_new_string_nocheck()函數(shù)代替json_object_new_string()函數(shù)外,還可以在解析JSON數(shù)據(jù)前,通過函數(shù)json_tokener_enable_comments()和json_tokener_set_flags()先禁止解析注釋和將JSON轉(zhuǎn)為可讀格式。

int main()
{
const char *json_str = "{\n"
"    \"name\":     \"Tom\"   ,\n"
"    \"age\" : 18 ,\n"
"    \"sex\":\"male\"\n"
"}";
json_object *json_obj = json_tokener_parse(json_str);
json_object_put(json_obj);
return 0;
}

上面這段代碼,json_tokener_parse()函數(shù)默認(rèn)會(huì)將JSON數(shù)據(jù)轉(zhuǎn)為可讀格式,也就是會(huì)將空格、換行符等特殊字符添加到解析后的JSON數(shù)據(jù)中。如果不想添加這些符號,可以將json_tokener_set_flags()函數(shù)的flags參數(shù)設(shè)置為JSON_TOKENER_STRICT或JSON_TOKENER_DEFAULT,將JSON數(shù)據(jù)轉(zhuǎn)為不可讀格式。此時(shí)調(diào)用json_object_get_string()函數(shù)獲取字符串類型的值時(shí),會(huì)自動(dòng)忽略值前后的空格。

總之,在C語言中處理JSON數(shù)據(jù)時(shí),需要特別注意空格的處理。通過上面介紹的方法,可以有效地解決JSON空格問題。