jansson資料提取

2021-09-24 03:37:04 字數 2973 閱讀 8656

1、支援按照表名、記錄號、jsonpath從原始資料中提取指定欄位的值

2、支援按照表名從原始資料中獲取有多少條記錄

3、支援按照表名、記錄號和jsonpath從原始資料中獲取指定內層json_array的記錄數

#include #include #include #include union type

; struct json_value

;struct my_json

;struct json_count

;void get_value_by_json(json_t* root,struct json_value* json)//獲取json的型別和資料

break;

case json_array :

break;

case json_string :

break;

case json_integer:

break;

case json_real :

break;

case json_true :

break;

case json_false :

break;

case json_null :

break;

}}struct json_count* json_load_by_name(const char* table_name,const char* file_path)

; strncat(filename_buf,file_path,strlen(file_path));

strncat(filename_buf,"/",1);

strncat(filename_buf,table_name,strlen(table_name));

strncat(filename_buf,".gmdata",strlen(".gmdata"));//獲取檔案的路徑

json_error_t error;

(*json_ret).root=json_load_file(filename_buf,json_reject_duplicates,&error);//從指定路徑檔案提取json值

if((*json_ret).root==null)

switch(json_typeof((*json_ret).root))

break;

case json_array :

break;

default:

break;

}return json_ret;

}void string_cut(char* buf,int buf_size,const char*source,char cut)//以字元cut為分隔符,將字串source進行分割

*buf='\0';//字串結束符

}void get_value_by_jsonpath(json_t* root,const char* json_path,struct my_json* json_ret)

;//用於儲存切割出來的字串

unsigned int len=0;//記錄從**開始擷取

json_t *ret=root;

while(len<=strlen(json_path))

else//鍵值對沒找到(可能是陣列表示形式,也可能成員不存在)

;//用於儲存陣列元素的鍵值

int index=0;//用於儲存陣列的index

char* position1=strrchr(buf,'[');//確定[最後次出現的位置

char* position2=strchr(buf,']');//確定]最後次出現的位置

if(position1>=position2-1||position1==null||position2==null)//判斷「」出現形式正確

char *tmp=position1;

for(++position1;position1'9'||*position1<'0')

//return null;

}index=10*index+(*position1-'0');

}for(int i=0;buf+iindex)//判斷是否為陣列json並且陣列長度是否符合要求

ret=json_array_get(array,index);//獲取陣列array第index個元素

}if(ret==null)//到當前路徑已找不到,則不用繼續查詢

//return null;

len+=strlen(buf)+1;//到當前路徑能找到,則繼續擷取key或者陣列名

}//獲取內層的記錄數

if(ret==null)

(*json_ret).num_bottom=0;

else if(json_is_array(ret))

(*json_ret).num_bottom=json_array_size(ret);

else

(*json_ret).num_bottom=1;

(*json_ret).value=ret;//*

}struct my_json* get_value(json_t* root,int rd_id,const char* json_path)//

get_value_by_jsonpath(root,json_path,json_ret);

}break;

case json_array :

json_t* record=json_array_get(root,rd_id);//獲取第rd_id條記錄

if(record==null)

get_value_by_jsonpath(record,json_path,json_ret);

}break;

default:

break;

}return json_ret;

}int main ()

if(json_ret!=null)

}

window下jansson安裝和使用

jansson是乙個用於編碼,解碼和操作json資料的c庫。它的特點是 簡單直觀的api和資料模型 綜合檔案 不依賴於其他庫 完整的unicode支援 utf 8 廣泛的測試套件 官網 安裝官網方法 cd jansson 2.11 md build cd build c program files ...

資料提取 常用的手機資料提取方法

閒暇時間,隨手記錄,願與諸位朋友分享。學識有限,不當之處,懇請各位大神不吝賜教,也是對我自己的學習提高過程!言歸正文 手機取證,從字面理解,可以分為取和證兩個過程。取,把資料原原本本的從手機中提取出來。證,通過資料檢索 挖掘 分析,尋找與案件有關的線索和證據。對於我們來說,二者缺一不可。但萬事開頭難...

Linux 資料提取

有時候我們需要從檔案裡提取資料,當然也可能是老闆甩過來乙個檔案讓你把裡面的 和郵箱全部提取,這時候一條一條的複製貼上總是太麻煩,這個時候我們就需要利用一些命令和正規表示式在linux系統中自動提取出來。1.提取data2檔案中的數字開頭的行,並把他們寫入 home root num中。2.提取dat...