在C語言中,處理JSON數(shù)據(jù)時(shí),經(jīng)常需要截取JSON字符串中的某個數(shù)組,下面介紹一種方法。
char* json = "{\"name\":\"Jack\",\"age\":27,\"hobbies\":[\"reading\",\"running\",\"swimming\"]}"; // 假設(shè)需要截取"hobbies"數(shù)組 char* arrayStart = strstr(json, "\"hobbies\":["); if (arrayStart == NULL) { // 找不到數(shù)組,返回錯誤 return; } char* arrayEnd = strchr(arrayStart, ']'); if (arrayEnd == NULL) { // 找不到數(shù)組結(jié)束符號']',返回錯誤 return; } // 計(jì)算數(shù)組長度 int arrayLength = arrayEnd - (arrayStart + strlen("\"hobbies\":[")); if (arrayLength< 0) { // 數(shù)組長度小于0,返回錯誤 return; } // 復(fù)制數(shù)組內(nèi)容到新的字符串中 char* arrayString = (char*)malloc(arrayLength + 1); memcpy(arrayString, arrayStart + strlen("\"hobbies\":["), arrayLength); arrayString[arrayLength] = '\0'; // 字符串結(jié)尾添加'\0'
上面的代碼中,首先使用字符串查找函數(shù)strstr和strchr找到數(shù)組的起始位置和結(jié)束位置,然后根據(jù)起始位置和數(shù)組內(nèi)容長度計(jì)算出數(shù)組的長度,最后使用memcpy函數(shù)將數(shù)組內(nèi)容復(fù)制到新的字符串中。
需要注意的是,這種方法只適用于JSON字符串中的簡單數(shù)組,如果數(shù)組中包含嵌套的JSON對象或數(shù)組,需要使用更復(fù)雜的算法進(jìn)行截取。