怎麼用c語言獲取json中的資料

時間 2021-07-08 21:14:36

1樓:home我是逗逗呀

用c語言獲取json中的資料的方法是使用 cjson。

以下簡單介紹用cjson的思路及實現:

1)建立json,從json中獲取資料。

#nclude

#include "cjson.h"

char * makejson()

cjson * pjsonroot = null;

pjsonroot = cjson_createobject();

if(null == pjsonroot)

return null;

cjson_addstringtoobject(pjsonroot, "hello", "hello world");

cjson_addnumbertoobject(pjsonroot, "number", 10010);

cjson_addbooltoobject(pjsonroot, "bool", 1);

cjson * psubjson = null;

psubjson = cjson_createobject();

if(null == psubjson)

// create object faild, exit

cjson_delete(pjsonroot);

return null;

cjson_addstringtoobject(psubjson, "subjsonobj", "a sub json string");

cjson_additemtoobject(pjsonroot, "subobj", psubjson);

char * p = cjson_print(pjsonroot);

// else use :

// char * p = cjson_printunformatted(pjsonroot);

if(null == p)

//convert json list to string faild, exit

//because sub json psubjson han been add to pjsonroot, so just delete pjsonroot, if you also delete psubjson, it will coredump, and error is : double free

cjson_delete(pjsonroot);

return null;

//free(p);

cjson_delete(pjsonroot);

return p;

}void parsejson(char * pmsg)

if(null == pmsg)

return;

cjson * pjson = cjson_parse(pmsg);

if(null == pjson)

// parse faild, return

return ;

}// get string from json

cjson * psub = cjson_getobjectitem(pjson, "hello");

if(null == psub)

//get object named "hello" faild

printf("obj_1 : %s\n", psub->valuestring);

// get number from json

psub = cjson_getobjectitem(pjson, "number");

if(null == psub)

//get number from json faild

printf("obj_2 : %d\n", psub->valueint);

// get bool from json

psub = cjson_getobjectitem(pjson, "bool");

if(null == psub)

// get bool from json faild

printf("obj_3 : %d\n", psub->valueint);

// get sub object

psub = cjson_getobjectitem(pjson, "subobj");

if(null == psub)

// get sub object faild

cjson * psubsub = cjson_getobjectitem(psub, "subjsonobj");

if(null == psubsub)

// get object from subject object faild

printf("sub_obj_1 : %s\n", psubsub->valuestring);

cjson_delete(pjson);

int main()

char * p = makejson();

if(null == p)

return 0;

printf("%s\n", p);

parsejson(p);

free(p);  //這裡不要忘記釋放記憶體,cjson_print()函式或者cjson_printunformatted()產生的記憶體,使用free(char *)進行釋放

return 0;

2)建立json陣列和解析json陣列

//建立陣列,陣列值是另一個json的item,這裡使用數字作為演示

char * makearray(int isize)

cjson * root = cjson_createarray();

if(null == root)

printf("create json array faild\n");

return null;

int i = 0;

for(i = 0; i < isize; i++)

cjson_addnumbertoobject(root, "hehe", i);

char * out = cjson_print(root);

cjson_delete(root);

return out;

}//解析剛剛的cjson陣列

void parsearray(char * pjson)

if(null == pjson)

return ;

cjson * root = null;

if((root = cjson_parse(pjson)) == null)

return ;

int isize = cjson_getarraysize(root);

for(int icnt = 0; icnt < isize; icnt++)

cjson * psub = cjson_getarrayitem(root, icnt);

if(null == psub)

continue;

int ivalue = psub->valueint;

printf("value[%2d] : [%d]\n", icnt, ivalue);

cjson_delete(root);

return;

有兩種方法:

一是標準的輸出輸入方式 比如新建一個磁碟檔案c:\a.txt, 將鍵盤輸入的一字串寫到檔案中:

file *ft;

char str[50];

ft=fopen("c:\\a.txt","w+");

printf("輸入一個字串:");

scanf("%s",str);

fputs(str,ft);

fclose(ft);

//重新開啟這個檔案並讀出字串,顯示在螢幕上 ft=fopen("c:\\a.txt","rt");

fgets(str,50,ft);

fclose(ft); printf("%s",str);

二是低階輸入輸出方式 仍如上例:

int hd; char str[50]; printf("輸入一個字串:");

scanf("%s",str);

hd=open("c:\\a.txt",o_creat|o_text|o_wronly);

write(hd,str,strlen(str));

close(hd); //重新開啟這個檔案並讀出字串,顯示在螢幕上。

hd=open("c:\\a.txt",o_text|o_rdonly); read(hd,str,50);

close(hd); printf("%s",str)。

2樓:匿名使用者

可以使用sscanf來讀取。一個例子:

#include

int main(void) ";

int a, b;

sscanf(str, "%*[^:]:%d%*[^:]:%d%*", &a, &b);

printf("a = %d, b = %d\n", a, b);

return 0;

}注意:上面aaa和bbb使用的是中文的引號。

c語言cjson如何快速刪除陣列中元素? 5

3樓:元亨利貞

你可以用函式來實現快速刪除元素。

4樓:匿名使用者

陳語嫣,我認為如何快速刪除資料組中的元素,我認為你可以通過他的設定來完成。

5樓:匿名使用者

5 c語言cjson如何快速刪除陣列中元素?

比如刪除cjson連結串列中指定的元素,遍歷的方法太慢有沒有更好的方法

c(程式語言) c/c++ 程式設計 程式語言 計算機語言

6樓:匿名使用者

5 c語言cjson如何快速刪除陣列中元素?

用c語言列印,用c語言列印1 100的數 每打10個數換行

天線寶寶 具體的 如下 include int main void int i for i 1 i 100 i printf d i if i 10 0 printf n return 0 主要就是應用for迴圈來列印數字,然後用選擇語句,當列印了十個數字就換行。c語言入門 3.接下來,我們又點 檔...

怎麼用c語言程式設計序從0 80中隨機抽取數

鈊 煩 薏亂 你用rand函式返回值 81,得到的結果必然在0 80之間。include main 首先,加一個 include 然後設一個變數,如j,j rand 就可以給j賦一個1 32767的隨機數,如果要獲得一個隨機函式的十位 其它類似 只需令j j 10就行.新增標頭檔案 include ...

c語言,怎麼用fscanf 把資料讀到動態陣列中

風若遠去何人留 要經過如下幾個步驟 1 開啟檔案。2 建立動態陣列。如果事先可以預知資料總數,或者可以通過開啟的檔案獲取到需要讀取的數量,那麼這一步可以使用已知或讀取到的值來建立動態陣列。否則可以先暫定一個大小,在實際讀取中如出現不足再用realloc函式重新分配。3 格式化讀取資料。用scanf讀...