#include #include #include #define json_max 20
enum json_style
;struct json
;struct json * str2json(char **start,int *len)
else if(**start == 58)
else if(**start == '}')
else if(**start == ',')
*start = *start + 1;
} return c;
}void show(struct json *j,int l)
else
}}void getjsonvalue(struct json *j,int l,char *input,char* output,enum json_style jstyle)
else
return;
} if((&j[i])->child_len !=0)
}}void deljson(struct json *j,int l)
} free(j);
}int f(void)
"; //char s = "}";
char s = "}}";
//char s = ",]}";//無法解析
char *s;
struct json *j;
char json_str[2000] = ;
int l;
char tmp[50];
char *json_i,*json_j,*json_k;
//printf("%s",s);
strcat(json_str,"root:");
json_j = strchr(s,'');
json_i = json_str + strlen("root:");
strncpy(json_str + strlen("root:"),json_j,json_k-json_j + 1);
//printf("%s\n",json_str);
s = json_str;
j = str2json(&s,&l);
show(j,1);
memset(tmp,0,sizeof(tmp));
getjsonvalue(j,1,"b",tmp,json_int);
printf("%s\n",tmp);
memset(tmp,0,sizeof(tmp));
getjsonvalue(j,1,"c",tmp,json_int);
printf("%s\n",tmp);
deljson(j,1);
}int main()
主要的是實現json的字串轉為自定義的json結構體
需要注意的是下面這一段
strcat(json_str,"root:");
在json的字串前面新增「root:」,就和構造佇列時用到的那個無用的頭乙個意思。
解析過程用的是遞迴。
解析過程並不完善,例如下面這一段json的字串就無法解析,之後再完善吧。
char s = ",]}";
用C 實現乙個Json解析器(3) 詳細設計
上回我們已經得到了簡單類圖,這次就來細品一下每個類應該長什麼樣,需不需要再增加輔助類。首先來給每個類加入成員 lexer 詞法分析器的任務是把json字串轉換成單詞流,只有乙個方法analyze。token 單詞顯然是乙個值物件,只有value和tokentype兩個唯讀屬性。考慮到值型別的效率比引...
分享乙個c 的json解析庫
7月25日更新 新增關於如何讀取json的值的內容。先貼上 哈 來自github lxjson a json library in cpp 附 json是什麼?怎麼用啊?如何驗證我寫的json是否正確啊?有以下幾點是我認為它的優勢所在 explicit json noexcept explicit ...
用 C 實現乙個變長陣列
我想用 c 的人都用過 std vector 它是乙個可變長的陣列,在很多時候都比 c 固有的定長陣列要靈活。c 裡沒有這樣的標準化設施,但是寫軟體的人通常都會實現乙個。正所謂,不厭其煩的重造輪子 d 這裡我們不討論造輪子的好壞問題,直接討論下實現這麼個東西的一點小技巧吧。總是固執於用誰做的輪子的問...