c 语言json-c实例,C++构造和解析Json的使用示例

概述

JSON是一种轻量级的数据交互格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率,实际项目中经常用到,相比xml有很多优点,问问度娘,优点一箩筐。

第三方库

json解析选用jsoncpp作为第三方库,jsoncpp使用广泛,c++开发首选。

使用

使用c++进行构造json和解析json,选用vs2010作为IDE。工程中使用jsoncpp的源码进行编译,没有使用jsoncpp的库,为方便大家使用把dll和lib库也放到了我的工程jsoncpplib文件夹下,有需要的可以直接引用库。

待解析的json数据格式如下图:

9dd57d46fee772bed6d86545eb9c0ae8.png

/********************************************************

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

#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

{

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;

}

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值