C++使用Jsoncpp解析Json数据
2017-04-16 23:08
751 查看
1. 下载 Jsoncpp , 生成项目
下载 Jsoncpp 源码 , 链接 : https://github.com/open-source-parsers/jsoncpp解压后 , 打开
jsoncpp-master\makefiles\vs71\jsoncpp.sln项目文件 , 生成
lib_json项目 , 会生成
jsoncpp.lib文件 ;
2. 项目中引用 Jsoncpp
将 Jsoncpp 文件夹下面的\include\json文件夹下面的
.h文件和
lib文件拷贝到目标项目对应的文件夹下面 ;
在项目的
属性中选择
配置属性->
C/C++->
常规->
附加包含目录, 添加 Jsoncpp 的
.h文件的路径 ;
在
链接器->
常规->
附加库目录中添加
jsoncpp.lib文件的路径 ;
同时还需要添加
.lib文件的附加依赖项 , 在
链接器->
输入->
附加依赖项, 填写
jsoncpp.lib, 或者直接在代码里面引用
#pragma comment(lib, "jsoncpp.lib");
注意 : Jsoncpp 代码生成的配置应该和引入项目代码生成的方式一致 , 否则会无法调用
然后在代码里面使用 Jsoncpp 类 :
// 引入 Jsoncpp 头文件 #include "json/json.h" // 使用 Jsoncpp 解析 Json 字符串 std::string strJson = "{\"id\":113,\"name\":\"John\",\"scores\":99.99}"; Json::Reader jrReader; Json::Value jvRoot; if (jrReader.parse(strJson, jvRoot)) { int nID = jvRoot["id"].asInt(); std::string strName = jvRoot["name"].asString(); double dScores = jvRoot["scores"].asDouble(); }
3. Jsoncpp 常用方法
解析简单 Json :
std::string strJson = "{\"id\":113,\"name\":\"John\",\"scores\":99.99}"; Json::Reader jrReader; Json::Value jvRoot; if (jrReader.parse(strJson, jvRoot)) { int nID = jvRoot["id"].asInt(); std::string strName = jvRoot["name"].asString(); double dScores = jvRoot["scores"].asDouble(); }
解析数组 :
std::string strJsonArray = "[{\"id\":113},{\"id\":114},{\"id\":115}]"; Json::Reader jrReader; Json::Value jvRoot; if (jrReader.parse(strJsonArray, jvRoot)) { if (jvRoot.type() == Json::arrayValue) { int nSize = jvRoot.size(); for (int i = 0; i<nSize; i++) { int nID = jvRoot[i]["id"].asInt(); } } }
遍历 Json 对象内部属性 :
std::string strJsonMess = "{\"id\":113,\"name\":\"John\",\"scores\":99.99,\"courses\":[\"Math\",\"English\"],\"car\":{\"code\":\"PK196\"}}"; Json::Reader jrReader; Json::Value jvRoot; if (jrReader.parse(strJsonMess, jvRoot)) { Json::Value::Members jvmMembers = jvRoot.getMemberNames(); for (auto iter = jvmMembers.begin(); iter != jvmMembers.end(); iter++) { if (jvRoot[*iter].type() == Json::objectValue) { std::string strCode = jvRoot[*iter]["code"].asString(); } else if (jvRoot[*iter].type() == Json::arrayValue) { int nSize = jvRoot[*iter].size(); for (int i = 0; i<nSize; i++) { std::string strCourse = jvRoot[*iter][i].asString(); } } else if (jvRoot[*iter].type() == Json::stringValue) { std::string strName = jvRoot[*iter].asString(); } else if (jvRoot[*iter].type() == Json::realValue) { double dScores = jvRoot[*iter].asDouble(); } else if (jvRoot[*iter].type() == Json::intValue) { int nID = jvRoot[*iter].asDouble(); } else { } } }
写入 Json :
Json::Value jvRoot; Json::FastWriter jfwWriter; Json::Value jvPerson; jvPerson["id"] = 113; jvPerson["name"] = "John"; jvRoot.append(jvPerson); std::string strJson = jfwWriter.write(jvRoot);
个人网站: Github , 欢迎点击给星
相关文章推荐
- C++之使用jsoncpp解析json数据
- 【C++】JSON数据解析——jsoncpp的使用
- 【C++】JSON数据解析——jsoncpp的使用
- 【C++】JSON数据解析——jsoncpp的使用(上)
- C++使用 jsoncpp 解析json数据
- 【C++】JSON数据解析——jsoncpp的使用(下)
- 使用JsonCPP解析JSON数据 C++
- 【C++】JSON数据解析——jsoncpp的使用
- JSON数据解析——jsoncpp的使用
- C++使用jsoncpp解析json
- JSON数据解析——jsoncpp的使用(上)
- C++使用JsonCpp库操作json格式数据示例
- 使用 C++ 库 jsoncpp 处理 JSON 数据
- 使用jsoncpp解析JSON数据
- C++ 解析Json VC6 中编译、使用jsoncpp
- c++使用jsonCpp和boost库解析json总结
- C++ Builder 使用 JsonCpp 解析json格式数据方法( 支持 UNICODE (UTF-16) / UTF-8 )
- C++ 使用Json封装数据和解析数据
- vs2013 c++ 编译配置jsoncpp和使用jsoncpp解析json文件
- c++ 第三方json解析库 jsoncpp的使用