一、JSON简介

JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读、编写、解析。

JSON由两种基本结构构成:

)"名称/值"对的集合,可以理解为对象。

)值的组合,可以理解为数组。

JSON对象简单示例

{

"header": {

"pid": "10",

"cas": "1"

},

"body": {

"bodyCode": "JSON",

"bodyName":"JavaScriptObject Notation",

"GUId": "1"

}

}

{

"header": {

"pid": "10",

"cas": "1"

},

"ack": [{

"ackCode": "JSON",

"ackName":"JavaScript ObjectNotation",

},{

"ackCode": "JSON",

"ackName":"JavaScript ObjectNotation",

}

"GUId":"1"

}

JSON更详细的介绍请看官网:http://www.json.org

二、JSONCPP

1.     JsonCPP简介

jsoncpp是c++解析JSON串常用的解析库之一。其常用的类有:

a)     Json::Value     可以表示里所有的类型,比如int,string,object,array等,其支持的类型可以参考Json:ValueType中的值。

b)     Json::Reader   将json文件流或字符串解析到Json::Value,主要函数有Parse。

c)     Json::Writer    与Json::Reader相反,将Json::Value转化成字符串流,注意它的两个子类:Json::FastWriter和Json::StyleWriter,分别输出不带格式的json和带格式的json。

d)     Json::Value::Members 主要用于以STL风格解析JSON数组。看过源代码的人已知道,Members其实是typedefvector<string>而已。

2.     JSONCPP解析示例

a)    解析JSON串格式

{

  "JsonID" : "BD6D7FDA-54D2-468b-A3DE-9D5FBDB78207",

  "Send" : {

     "ID" : "B8E09E97-F379-4bb0-814A-389FD3F66631",

     "Items" : [

        {

           "Count" : 2,

           "Code" : "0101",

           "X" : 1,

           "Y" : 2

        },

        {

           "Count" : 2,

           "Code" : "0101",

           "X" : 1,

           "Y" : 2

        }

      ]

   }

}

b)    生成的JSON串

{

  "Ack" : [

      {

        "ActualCount" : 2,

        "Code" : "0101"

     },

      {

        "ActualCount" : 2,

        "Code" : "0101"

      }

   ],

  "JsonID" : "BD6D7FDA-54D2-468b-A3DE-9D5FBDB78207"

}

c)        解析、生成JSON代码

需要引入的.h文件

[html]  view plain copy

 
  1. #pragma once
  2. #pragma comment(lib, "json_vc71_libmtd.lib")
  3. #include "json/json.h"

实现

[cpp]  view plain copy

 
  1. void CJSONTestDlg::OnBnClickedButton1()
  2. {
  3. CEdit* pEdit =(CEdit*)GetDlgItem(IDC_EDIT1);
  4. CString str;
  5. pEdit->GetWindowText(str); //str即为a)中定义的JSON串
  6. pEdit->FmtLines(true);
  7. Json::Reader reader;
  8. Json::Value root;
  9. if (reader.parse(WC2UT(str.GetBuffer(0)), root))  // reader将Json字符串解析到root,root将包含Json里所有子元素
  10. {
  11. std::string JsonID = root["JsonID"].asString();
  12. Json::Value rtnRoot;
  13. rtnRoot["JsonID"]=JsonID;
  14. Json::Value ack;
  15. Json::Value send = root["Send"];
  16. if(!send["Items"].isNull()){
  17. Json::Value Items = send["Items"];
  18. int sendSize = Items.size();
  19. for(int i=0;i<sendSize;i++){//循环获取到JSON串数组当中的值
  20. std::string  Code = Items[i]["Code"].asString();
  21. int x = Items[i]["X"].asInt();
  22. int y = Items[i]["Y"].asInt();
  23. int count = Items[i]["Count"].asInt();
  24. //更具读到的JSON串中的值生成所需内容
  25. Json::Value newAckItem;
  26. newAckItem["Code"]=Code;
  27. newAckItem["ActualCount"]=count;
  28. ack.append(newAckItem);
  29. }
  30. }
  31. rtnRoot["Ack"]=ack;
  32. std::string rtnOut = rtnRoot.toStyledString();//生成带格式的JSON串
  33. #ifdef UNICODE
  34. std::wstring stemp = s2ws(rtnOut);
  35. LPCWSTR result = stemp.c_str();
  36. #else
  37. LPCWSTR result = rtnOut.c_str();
  38. #endif
  39. MessageBox(result,_T("根据JSON串,生成的对应JSON串信息"));
  40. CEdit* pEdit =(CEdit*)GetDlgItem(IDC_EDIT2);
  41. pEdit->SetWindowText(result);
  42. }else{
  43. CEdit* pRtnEdit =(CEdit*)GetDlgItem(IDC_EDIT2);
  44. pRtnEdit->SetWindowText(_T("JSON格式错误"));
  45. }
  46. }

将JSONCPP以静态库方式导入,需要注意项目中的代码生成中的运行库,和JSONCPP的静态库项目的代码生成的运行库要一致,否则将报如下错误

afxver_.h(81): fatal error C1189: #error :  Please use the /MD switch for _AFXDLL builds

项目中的Runtime Library需设置的一样

C++解析JSON之JsonCPP的更多相关文章

  1. C++的Json解析库:jsoncpp和boost

    C++的Json解析库:jsoncpp和boost - hzyong_c的专栏 - 博客频道 - CSDN.NET C++的Json解析库:jsoncpp和boost 分类: 网络编程 开源库 201 ...

  2. C++使用 jsoncpp 解析json数据

    整合自网路 一.安装的方法 1.安装 scons 下载地址:http://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.ta ...

  3. C++ 解析Json——jsoncpp

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,本文主要对VS2008中使用Jsoncpp解析json的方法做一下记录.Jsoncpp是个跨 ...

  4. C++ 解析Json——jsoncpp(转)

    原文:https://www.cnblogs.com/liaocheng/p/4243731.html JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和 ...

  5. C++ Jsoncpp源代码编译与解析Json

    1.Json 数据表示方式介绍 这个可以看之前的一个文章里面有说明:Java解析(读取)Json数据 2.C++ Jsoncpp 2.1 Jsoncpp介绍 (1)JsonCpp主要包含三种类型的cl ...

  6. C++的Json解析库:jsoncpp和boost(转)

    原文转自 http://blog.csdn.net/hzyong_c/article/details/7163589 JSON(JavaScript Object Notation)跟xml一样也是一 ...

  7. [转]C++的Json解析库:jsoncpp和boost

    JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...

  8. C++处理Json串——jsoncpp库

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,本文主要对VS2008中使用Jsoncpp解析json的方法做一下记录.Jsoncpp是个跨 ...

  9. 更好更快更高效解析JSON说明

    现在来一个实例解析类,直接就把解析JSON到QVariant去了.唯一不足的是没有搞错误处理,具体方法也请各位自行参考json-c的发行文档,这样比较方便叙述,STL或者Boost我都没有认真接触过, ...

随机推荐

  1. MVC小系列(二十)【给Action提供HttpStatusCodeResult】

    主要用到: HttpStatusCodeResult 和HttpStatusCode 的http返回状态 比如: /// <summary> /// 使用异步模式 /// </sum ...

  2. memcache的分布式算法(转)

    memcached的分布式 正如第1次中介绍的那样, memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能. 服务器端仅包括 第2次. 第3次 前坂介绍的内存存储功能,其实现 ...

  3. iOS开发——文本高度

    1.简单的计算文本高度 // 要计算的文本内容 NSString *testString = @"刘成利,软件工程专业毕业,iOS开发者,目前工作于北京,在证券金融领域从事iOS App开发 ...

  4. O-C相关-07-@property关键字简介与使用

    基本概念:在O-C中,创建完类之后还需要给一个类添加属性和方法,之前说过的set和get方法比较繁琐,因此引入了@property 这个编译器指令.@property 是一个编译器指令.所谓的编译器指 ...

  5. JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值

    1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3; //等价于 var [a, ...

  6. jeesite 一对多,对子表单独修改时出现 HV000030: No validator could be found for type:

    这是由于springmvc校验功能造成的,解决办法参见我的百度回答 http://zhidao.baidu.com/question/2141673418419314468

  7. boa服务器问题日志

    1. 某一次在登录boa服务器的时候,不知哪里的问题,无法登录「192.168.1.0-192.168.3.255」网段的设备,但是公司IP网段的机器都可以用.最终发现,问题出现在自己的PC添加了浏览 ...

  8. C++类继承内存布局(一)

    转自:http://blog.csdn.net/jiangyi711/article/details/4890889# 一 类布局 不同的继承方式将导致不同的内存布局 1)C结构 C++基于C,所以C ...

  9. 解决Mysql的主从数据库没有同步的两种方法

    今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist;   查看下进程是否Sleep太多.发现很正常.show master status; ...

  10. 深度优化LNMP之PHP (转)

    深度优化LNMP之PHP   PHP缓存加速介绍   1.操作码介绍及缓存原理     当客户端请求一个php程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码文件(Operate ...