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数据格式如下图:

C++构造和解析JSON_第1张图片

/********************************************************
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 
#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

关注下面公众号,回复"104"获取源码
C++构造和解析JSON_第2张图片

你可能感兴趣的:(C++构造和解析JSON)