美圖欣賞 | 設為首頁 | 加入收藏 | 網站地圖

當前位置:電腦中國 > 編程 > C++ >

C++構造和解析JSON

2019-10-18 14:49|來源:未知 |作者:dnzg |點擊:

C++構造和解析JSON

JSON是一種輕量級的數據交互格式,易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率,實際項目中經常用到,相比xml有很多優點,問問度娘,優點一籮筐。

第三方庫

json解析選用jsoncpp作為第三方庫,jsoncpp使用廣泛,c++開發首選。

jsoncpp目前已經托管到了github上,地址:https://github.com/open-source-parsers/jsoncpp

使用

使用c++進行構造json和解析json,選用vs2010作為IDE。工程中使用jsoncpp的源碼進行編譯,沒有使用jsoncpp的庫,為方便大家使用把dll和lib庫也放到了我的工程jsoncpplib文件夾下,有需要的可以直接引用庫。

待解析的json數據格式如下圖:

file

/********************************************************
Copyright (C), 2016-2017,
FileName:   main
Author:     woniu201
Email:      [email protected]
Created:    2017/09/06
Description:use jsoncpp src , not use dll, but i also provide dll and lib.
********************************************************/
 
#include "stdio.h"
#include <string>
#include "jsoncpp/json.h"
 
using namespace std;
 
/************************************
@ Brief:        read file
@ Author:       woniu201 
@ Created:      2017/09/06
@ Return:       file data  
************************************/
char *getfileAll(char *fname)
{
    FILE *fp;
    char *str;
    char txt[1000];
    int filesize;
    if ((fp=fopen(fname,"r"))==NULL){
        printf("open file %s fail \n",fname);
        return NULL;
    }
 
    fseek(fp,0,SEEK_END); 
 
    filesize = ftell(fp);
    str=(char *)malloc(filesize);
    str[0]=0;
 
    rewind(fp);
    while((fgets(txt,1000,fp))!=NULL){
        strcat(str,txt);
    }
    fclose(fp);
    return str;
}
 
/************************************
@ Brief:        write file
@ Author:       woniu201 
@ Created:      2017/09/06
@ Return:           
************************************/
int writefileAll(char* fname,const char* data)
{
    FILE *fp;
    if ((fp=fopen(fname, "w")) == NULL)
    {
        printf("open file %s fail \n", fname);
        return 1;
    }
    
    fprintf(fp, "%s", data);
    fclose(fp);
    
    return 0;
}
 
/************************************
@ Brief:        parse json data
@ Author:       woniu201 
@ Created:      2017/09/06
@ Return:           
************************************/
int parseJSON(const char* jsonstr)
{
    Json::Reader reader;
    Json::Value  resp;
 
    if (!reader.parse(jsonstr, resp, false))
    {
        printf("bad json format!\n");
        return 1;
    }
    int result = resp["Result"].asInt();
    string resultMessage = resp["ResultMessage"].asString();
    printf("Result=%d; ResultMessage=%s\n", result, resultMessage.c_str());
 
    Json::Value & resultValue = resp["ResultValue"];
    for (int i=0; i<resultValue.size(); i++)
    {
        Json::Value subJson = resultValue[i];
        string cpuRatio = subJson["cpuRatio"].asString();
        string serverIp = subJson["serverIp"].asString();
        string conNum = subJson["conNum"].asString();
        string websocketPort = subJson["websocketPort"].asString();
        string mqttPort = subJson["mqttPort"].asString();
        string ts = subJson["TS"].asString();
 
        printf("cpuRatio=%s; serverIp=%s; conNum=%s; websocketPort=%s; mqttPort=%s; ts=%s\n",cpuRatio.c_str(), serverIp.c_str(),
            conNum.c_str(), websocketPort.c_str(), mqttPort.c_str(), ts.c_str());
    }
    return 0;
}
 
/************************************
@ Brief:        create json data
@ Author:       woniu201 
@ Created:      2017/09/06
@ Return:           
************************************/
int createJSON()
{
    Json::Value req;
    req["Result"] = 1;
    req["ResultMessage"] = "200";
 
    Json::Value object1;
    object1["cpuRatio"] = "4.04";
    object1["serverIp"] = "42.159.116.104";
    object1["conNum"] = "1";
    object1["websocketPort"] = "0";
    object1["mqttPort"] = "8883";
    object1["TS"] = "1504665880572";
    Json::Value object2;
    object2["cpuRatio"] = "2.04";
    object2["serverIp"] = "42.159.122.251";
    object2["conNum"] = "2";
    object2["websocketPort"] = "0";
    object2["mqttPort"] = "8883";
    object2["TS"] = "1504665896981";
 
    Json::Value jarray;
    jarray.append(object1);
    jarray.append(object2);
 
    req["ResultValue"] = jarray;
 
    Json::FastWriter writer;
    string jsonstr = writer.write(req);
 
    printf("%s\n", jsonstr.c_str());
 
    writefileAll("createJson.json", jsonstr.c_str());
    return 0;
}
 
int main()
{
    char* json = getfileAll("parseJson.json");
    parseJSON(json);
    printf("===============================\n");
    createJSON();
 
    getchar();
    return 1;
}
(責任編輯:dnzg)
足彩半全场是什么意思