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数据格式如下图:
/******************************************************** 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++11并发编程关于原子操作atomic的代码示例
栏 目:C语言
下一篇:C++标准模板库map的常用操作
本文标题:C++构造和解析Json的使用示例
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/576.html
您可能感兴趣的文章
- 04-02c语言没有round函数 round c语言
- 01-10求子数组最大和的解决方法详解
- 01-10深入理解C++中常见的关键字含义
- 01-10使用C++实现全排列算法的方法详解
- 01-10c++中inline的用法分析
- 01-10用C++实现DBSCAN聚类算法
- 01-10全排列算法的非递归实现与递归实现的方法(C++)
- 01-10C++大数模板(推荐)
- 01-10浅谈C/C++中的static与extern关键字的使用详解
- 01-10深入C/C++浮点数在内存中的存储方式详解
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-11ajax实现页面的局部加载
- 01-10C#中split用法实例总结
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 04-02jquery与jsp,用jquery
- 01-10SublimeText编译C开发环境设置