C++构造和解析Json的使用示例

所属分类: 软件编程 / C 语言 阅读数: 53
收藏 0 赞 0 分享

概述

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

/********************************************************
Copyright (C), 2016-2017,
FileName: main
Author: woniu201
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 
@ 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 
@ 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 
@ 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 
@ 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;
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

更多精彩内容其他人还在看

C语言数组入门之数组的声明与二维数组的模拟

这篇文章主要介绍了C语言数组入门之数组的声明与二维数组的模拟,数组学习的同时也要相应理解C语言指针的作用,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中变量与其内存地址对应的入门知识简单讲解

这篇文章主要介绍了C语言中变量与其内存地址对应的入门知识简单讲解,同时这也是掌握指针部分知识的基础,需要的朋友可以参考下
收藏 0 赞 0 分享

讲解C语言编程中指针赋值的入门实例

这篇文章主要介绍了讲解C语言编程中指针赋值的入门实例,通过const int i与int *const pi这样两个例子来分析指针的赋值和地址指向,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中的结构体的入门学习教程

这篇文章主要介绍了C语言中的结构体的入门学习教程,以struct语句定义的结构体是C语言编程中的重要基础,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言编程入门之程序头文件的简要解析

这篇文章主要介绍了C语言编程入门之程序头文件的简要解析,包括头文件重复包含问题等方面的说明,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言编程中的联合体union入门学习教程

这篇文章主要介绍了C语言编程中的联合体union入门学习教程,也是C语言入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中数组作为函数的参数以及返回值的使用简单入门

这篇文章主要介绍了C语言中数组作为函数的参数以及返回值的使用简单入门,这里以一维数组作为基本条件进行例子讲解,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL的内存表的基础学习教程

这篇文章主要介绍了MySQL的内存表的基础学习教程,包括内存表的创建以及使用限制等等,需要的朋友可以参考下
收藏 0 赞 0 分享

C++中头文件的概念与基本编写方法

这篇文章主要介绍了C++中头文件的概念与基本编写方法,是C++入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

jQuery移动页面开发中主题按钮的设计示例

这篇文章主要介绍了jQuery移动页面开发中主题按钮的设计示例,jQuery是当今最具人气的JavaScript开发类库,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多