C++构造和解析JSON

Wesley13
• 阅读 750

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

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

关注下面公众号,回复"104"获取源码 C++构造和解析JSON

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
C++ 解析Json——jsoncpp(转)
 原文:https://www.cnblogs.com/liaocheng/p/4243731.html JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,和xml类似,本文主要对VS2008中使用Jsoncpp解析json的方法做一下记录。Jsoncpp是个跨平台的开源库,下载地址:http://so
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Gson之实例五
前面四篇博客基本上可以满足我们处理的绝大多数需求,但有时项目中对json有特殊的格式规定.比如下面的json串解析:{"tableName":"students","tableData":{"id":1,"name":"李坤","birthDay":"Jun 22, 2012 9:54:49 PM"},{"id":2,"name":"曹贵生"
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这