1. 程式人生 > 實用技巧 >cJSON和rapidjson開源庫解析資料

cJSON和rapidjson開源庫解析資料

1、

rapidjson官網:http://rapidjson.org/zh-cn/

/* 
解析JSON資料 並將解析的資料轉為 int型
入參:    char* JSONInfo        待解析JSON資料
char* Key            待解析的JSON中Key

出參:    int* Value            解析出的Value值 
返回值:0成功;非0失敗
*/
int  JSONtoInt(char* JSONInfo,char* Key,int* Value)
{
    //strReplace(JSONInfo," ","");    //去除空格
    Document  jsonDoc;
    rapidjson::Value::ConstMemberIterator root;
    
if(!jsonDoc.HasMember(Key) ) { return 1; //json does not contain this element } jsonDoc.Parse<rapidjson::kParseDefaultFlags>(JSONInfo); * Value = jsonDoc.FindMember(Key)->value.GetInt(); /* cJSON * root = cJSON_Parse(JSONInfo);//將字串格式的json資料轉化為JSON物件格式 if(root == NULL) { //MessageBox("parse error\n"); return 1 ; } cJSON* value = cJSON_GetObjectItem(root,Key); if( value == NULL ) { //MessageBox("Get value error!"); return 1; } char stmp[1024] = {0}; sprintf(stmp,"%s",cJSON_Print(value)); strReplace(stmp,"\"",""); //去除雙引號 strReplace(stmp," ",""); //去除空格 *Value = atoi(stmp);
*/ return PB_OK; } /* 解析JSON資料 並將解析的資料轉為 char* 入參: char* JSONInfo 待解析JSON資料 char* Key 待解析的JSON中Key 出參: char* Value 解析出的Value值 返回值:0成功;非0失敗 */ int JSONtoArray(char* JSONInfo,char* Key,char* Value) { //strReplace(JSONInfo," ",""); //去除空格 Document jsonDoc; rapidjson::Value::ConstMemberIterator root; jsonDoc.Parse
<rapidjson::kParseDefaultFlags>(JSONInfo); if(!jsonDoc.HasMember(Key) ) { return 1; //json does not contain this element } CString aa = jsonDoc.FindMember(Key)->value.GetString(); strcpy(Value,aa.GetBuffer()); /* //cJSON 開源庫是C的,在CPP會存在載入預編譯等問題,會比較容易報錯,移植性不好 cJSON * root = cJSON_Parse(JSONInfo);//將字串格式的json資料轉化為JSON物件格式 if(root == NULL) { //MessageBox("parse error\n"); return 1 ; } cJSON* value = cJSON_GetObjectItem(root,Key); if( value == NULL ) { //MessageBox("Get value error!"); return 1; } char stmp[1024] = {0}; sprintf(stmp,"%s",cJSON_Print(value)); strReplace(stmp,"\"",""); //去除雙引號 strReplace(stmp," ",""); //去除空格 strcpy(Value,stmp); */ return PB_OK; }
View Code

2、

#include "cJSON.h"

/* 
解析JSON資料 並將解析的資料轉為 int型
入參:    char* JSONInfo        待解析JSON資料
char* Key            待解析的JSON中Key

出參:    int* Value            解析出的Value值     
*/
int  JSONtoInt_cJSON(char* JSONInfo,char* Key,int* Value)
{
    
    strReplace(JSONInfo," ","");        //去除空格
    cJSON * root = cJSON_Parse(JSONInfo);//將字串格式的json資料轉化為JSON物件格式
    if(root == NULL)
    {
        //MessageBox("parse error\n");
        return 1 ;
    }


    cJSON* value = cJSON_GetObjectItem(root,Key);
    if( value == NULL )
    {
        //MessageBox("Get value error!");
        return 1;
    }

    char stmp[1024] = {0};

    sprintf(stmp,"%s",cJSON_Print(value));
    strReplace(stmp,"\"","");    //去除雙引號
    strReplace(stmp," ","");    //去除空格
    *Value  = atoi(stmp);
    
    

    return 0;
}

/* 
解析JSON資料 並將解析的資料轉為 char*
入參:    char* JSONInfo        待解析JSON資料
char* Key            待解析的JSON中Key

出參:    char* Value            解析出的Value值     
*/
int  JSONtoArray_cJSON(char* JSONInfo,char* Key,char* Value)
{
    
    cJSON * root = cJSON_Parse(JSONInfo);//將字串格式的json資料轉化為JSON物件格式
    if(root == NULL)
    {
        //MessageBox("parse error\n");
        return 1 ;
    }


    cJSON* value = cJSON_GetObjectItem(root,Key);
    if( value == NULL )
    {
        //MessageBox("Get value error!");
        return 1;
    }

    char stmp[1024] = {0};

    sprintf(stmp,"%s",cJSON_Print(value));
    strReplace(stmp,"\"","");    //去除雙引號
    strReplace(stmp," ","");    //去除空格
    strcpy(Value,stmp);
    


    return 0;

}
View Code