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