用c實現乙個json解析 並不完善

2021-09-09 06:53:19 字數 1642 閱讀 8476

#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 這裡我們不討論造輪子的好壞問題,直接討論下實現這麼個東西的一點小技巧吧。總是固執於用誰做的輪子的問...