• 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
    ");
            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
    ");
            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
    ");
            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
    ");
            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
  • 相关阅读:
    [NOI2019]回家路线(最短路,斜率优化)
    LOJ6686 Stupid GCD(数论,欧拉函数,杜教筛)
    Codeforces Global Round 4 题解
    CF908G New Year and Original Order(DP,数位 DP)
    [BJOI2019]光线(DP)
    CF1194F Crossword Expert(数论,组合数学)
    SPOJ31428 FIBONOMIAL(斐波那契数列)
    Codeforces Round 573 (Div.1) 题解
    [THUPC2018]弗雷兹的玩具商店(线段树,背包)
    数学基础
  • 原文地址:https://www.cnblogs.com/kwinwei/p/13159408.html
Copyright © 2020-2023  润新知