C++ Json解析 之 JsonCpp的详细运用细节
2017-12-05 15:10
1216 查看
在开发C++ 服务器的时候。常常需要 解析 Json文件。然后,就使用了jsoncpp,没毛病。 他是比较出名的 C++ JSON 解析库。在 JSON官网也是首推的。 但在使用的过程中,也碰到各种问题和疑难杂症,在这里给大家分享一下详细过程。
一: 下载 JsonCpp 源码。
sourceforge链接:sourceforge-Json 。 我此处使用的是这个。[b]
sourceforge上的现在已经不更新,项目已经转移到GITHUB[/b]
github链接:github-JsonCpp。
其中主要目录以及后面用途:
文件名 | Are |
---|---|
makefiles/vs71 | 用于编译lib文件,方便你的项目去引用 |
makefiles/msvc2010 | 和vs71作用一样 |
include/json | 要用到的头文件,也要引用到你的项目之中 |
src/lib_json | Cpp 文件。如果不编译的话要使用 |
二: 编译 JsonCpp 源码。
-编译前操作和注意事项:(编译工具:
VS2017中文)
打开
项目->
属性:配置属性。
属性 | 值 | 提示 | 否则(使用时) |
---|---|---|---|
配置 | Dubeg | 此处要和你的实际项目的版本一样 | error号:002 |
常规-> Window SDK版本 | 10.0.15063.0 | 此处要和你的实际项目的版本一样 | error号:001 |
常规-> 目标文件扩展名&& 常规-> 配置类型 | .lib | lib文件静态库 。你也可以做成动态库.dll。如果你使用方便 | |
常规-> 平台工具集 | Visual Studio 2017(v141) | 此处要和你的实际项目的版本一样 | 不知 |
C/C++-> 代码生成-> 运行库 | 多线程调试(/MTD) | 此处要和你的实际项目的版本一样 | error号:003 |
C/C++-> 预编译头 | 不使用预编译头) | 否则你会编译失败 | error号:004 |
如果按照以上配置来设置项目属性的话。应该就可以编译了。 如果没有根据以上配置来。有可能编译后的 Lib 在你项目中使用的时候将报一下错误: 请根据错误号在上面配置列表中找错误!
error code | error | 相关友情链接 |
---|---|---|
001 | 不好意思,我再次测试却没有出错。 | |
002 | fatal error C1083: de1a 无法打开编译器生成的文件: “../../build/vs71/release/lib_json\json_value.asm”: No such file or directory | |
003 | error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(JsonCppTese.obj 中) | 不匹配解决方案 |
得到文件:
配置 | 文件名 | 说明 |
---|---|---|
Release | json_vc71_libmt.lib | 实际项目中不同的 配置 则引用相应的 lib |
Debug | json_vc71_libmtd.lib | ………… |
三: 在自己项目中引用头和库。
-分别把:
1.
jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include\中的Json文件夹。
2. 编译得到的
json_vc71_libmt.lib文件 复制到 你的项目根目录中。
3. 如果没有编译文件
json_vc71_libmt.lib的话。还需要将
jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\src\lib_json中的源码文件复制过来。
都复制到你的项目根目录。 然后分别引用他们去你的工程,相关教程链接在下面!!!!!!!!!
静态链接库和动态链接库的生成和引用
四: 解析你的Json文件。
注意: Json::Value 只能处理 ANSI 类型的字符串,如果 C++ 程序是用 Unicode 编码的,最好加一个 Adapt 类来适配。jsoncpp 主要包含三种类型的 class:Value、Reader、Writer。jsoncpp 中所有对象、类名都在 namespace Json 中,包含 json.h 即可。
Json文件:
[ { "Name" : "MachineGun", "WeaponAttribute": { "ID": 105, "AttackValue": 50, "Defense": 0 }}, { "Name" : "PlasmaGun", "WeaponAttribute": { "ID": 106, "AttackValue": 5, "Defense": 50 }} ]
#pragma comment(lib, "json_vc71_libmtd.lib") #include "stdafx.h" #include "json/json.h" #include <fstream> #include <cassert> //using namespace std; // 如果fstream没有办法引用则需要这句 int a; int main() { ifstream ifs; ifs.open("WeaponConfiguration.json"); assert(ifs.is_open()); Json::Reader reader; Json::Value root; if (!reader.parse(ifs, root, false)) { printf("Parse error"); return -1; } assert(root.isArray()); int size = root.size(); std::cout << size << std::endl; for (int i = 0; i < size; i++) { Json::Value ¤t = root[i]; std::string name = root[i]["Name"].asString(); std::cout << name << std::endl; Json::Value &attribute = root[i]["WeaponAttribute"]; int lenght = attribute.size(); int id = attribute["ID"].asInt(); int attackValue = attribute["AttackValue"].asInt(); int defense = attribute["Defense"].asInt(); std::cout << id << std::endl; std::cout << attackValue << std::endl; std::cout << defense << std::endl; } cin >> a; return 0; }
运行!成功输出!恭喜你!!
[b]如果你还碰到什么错误的话,欢迎来 我自己的一个 讨论群559666429来,大家一起找答案。[/b]
相关文章推荐
- Cocos2dx3.10 VS2013添加 Json_Cpp第三方Json解析类库详细步骤
- C++ Jsoncpp源代码编译与解析Json
- C++的Json解析库:jsoncpp和boost .
- 很详细的JSON和JSONP原理与运用
- cocos2d-x 3.0 rapidJson 解析操作应该注意的细节
- android Json解析详解(详细代码)
- C++的Json解析库:jsoncpp和boost
- 【COCOS2D-X(1.X 2.X) Json(cpp版)及新加字体库篇】在Cocos2dx引擎中封装、解析Json(cpp版)数据以及添加自定义字体库 .
- ios影视项目解析 主要为讲block的细节 如果了解了 block的定义等 但是对运用不是很熟悉可以参考本文章
- json c++ 解析库 jsoncpp 编译和使用
- Android解析XML(PULL方式)和JSON 工作原理和实现过程(详细代码)
- 运用 三种 原生 谷歌 阿里 解析和生成json
- C++解析JSON之JsonCPP
- c++ 第三方json解析库 jsoncpp的使用
- C++ json 解析库:jsoncpp和boost .
- C++/MFC使用JSONCPP解析JSON字符串
- Json解析,让你不再困扰(非常详细)
- C++用库 jsoncpp 解析 JSON
- cocos2d-x JsonCpp 导入和详细使用介绍
- C++实现json转换,使用JsonCpp第三方库,详细说明