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讀...