MFC 下JSONCPP 的使用 C++ JSON解析

JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择

JSON的全称为:JavaScript Object Notation ,顾名思义,JSON是用于标记javascript对象的,详情参考http://www.json.org/。

本文选择第三方库JsonCpp来解析json,JsonCpp是比较出名的c++解析库,在json官网也是首推的。

JsonCpp简介

JsonCpp主要包含三种类型的class:Value Reader Writer。

jsoncpp中所有对象、类名都在namespace json中,包含json.h即可。

注意: Json::Value只能处理ANSI类型的字符串,如果C++程序使用Unicode编码的,最好加一个Adapt类来适配。

下载和编译

下载地址是:http://sourceforge.net/projects/jsoncpp/

解压之后得到jsoncpp-src-0.5.0文件夹,我们只需要jsoncpp的头文件和cpp文件,其中jsonscpp的头文件位于jsoncpp-src-0.5.0/include/json/,jsoncpp的cpp文件位于jsoncpp-src-0.5.0/src/lib_json/。

本人c++刚开始用,所以就用了个笨方法,把头文件和cpp文件全部加入到工程里面来,

步骤:

1.分别把include/json/ 和 src/lib/下的.h 和 .cpp 文件加入到工程里,别的不用加入。

2.生成工程

会报一些错误,解决方案 1 ,调整include的路径 2 在三个.cpp 头文件加入#include "StdAfx.h";然后在生成项目就不会报错了

3.想在那里用直接包含 json.h 头文件就可以了。


下面简单说下在网上看到的jsoncpp的用法

反序列化Json对象

 
 
  1. {
  2. "name":"json″,
  3. "array":[
  4. {
  5. "cpp":"jsoncpp"
  6. },
  7. {
  8. "java":"jsoninjava"
  9. },
  10. {
  11.  "PHP":"support"
  12. }
  13. ]
  14. }

我们要实现这个json的反序列号代码如下:

  
  
  • voidreadJson(){
  • usingnamespacestd;
  • std::stringstrValue="{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"PHP\":\"support\"}]}";
  • Json::Readerreader;
  • Json::Valuevalue;
  • if(reader.parse(strValue,value))
  • {
  • std::stringout=value["name"].asstring();
  • std::cout<<out<<std::endl;
  • constJson::ValuearrayObj=value["array"];
  •  for(unsignedinti=0;i<arrayObj.size();i++)
  • {
  • if(!arrayObj[i].isMember("cpp"))
  • continue;
  • out=arrayObj[i]["cpp"].asstring();
  • std::cout<<out;
  • if(i!=(arrayObj.size()-1))
  • std::cout<<std::endl;
  •  }
  • }
  • }
  • 序列化Json对象

     
     
    1. voidwriteJson(){
    2. usingnamespacestd;
    3. Json::Valueroot;
    4. Json::ValuearrayObj;
    5. Json::Valueitem;
    6. item["cpp"]="jsoncpp";
    7. item["java"]="jsoninjava";
    8. item["PHP"]="support";
    9. arrayObj.append(item);
    10. root["name"]="json";
    11. root["array"]=arrayObj;
    12. root.toStyledString();
    13. std::stringout=root.toStyledString();
    14. std::cout<<out<<std::endl;
    15.  }

    相关文章

    AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
    在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
    在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
    AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
    AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
    Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...