C++ Json解析 之 JsonCpp的详细运用细节
来源:互联网 发布:angularjs.js 下载 编辑:程序博客网 时间:2024/06/13 02:38
在开发C++ 服务器的时候。常常需要 解析 Json文件。然后,就使用了jsoncpp,没毛病。 他是比较出名的 C++ JSON 解析库。在 JSON官网也是首推的。 但在使用的过程中,也碰到各种问题和疑难杂症,在这里给大家分享一下详细过程。
一: 下载 JsonCpp 源码。
sourceforge链接:sourceforge-Json 。 我此处使用的是这个。
sourceforge上的现在已经不更新,项目已经转移到GITHUB
github链接:github-JsonCpp。
其中主要目录以及后面用途:
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 在你项目中使用的时候将报一下错误: 请根据错误号在上面配置列表中找错误!
一切配置OK之后。开始 生成 文件。
得到文件:
友谊链接:相关问题
三: 在自己项目中引用头和库。
-
分别把:
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;}
运行!成功输出!恭喜你!!
如果你还碰到什么错误的话,欢迎来 我自己的一个 讨论群559666429
来,大家一起找答案。
阅读全文
1 0
- C++ Json解析 之 JsonCpp的详细运用细节
- C++解析JSON之JsonCPP
- C++解析JSON之JsonCPP
- C++解析JSON之jsoncpp
- 【C++】JSON数据解析——jsoncpp的使用
- 【C++】JSON数据解析——jsoncpp的使用
- 【C++】JSON数据解析——jsoncpp的使用
- Json解析(C++)——jsoncpp
- C++/MFC使用JSONCPP解析JSON字符串
- C++的Json解析:jsoncpp 和boost
- C++的Json解析库:jsoncpp
- json解析库jsoncpp的使用
- C++的Json解析库:jsoncpp
- 基于开源库jsoncpp的json字符串解析
- C++的Json解析库:jsoncpp
- 基于开源库jsoncpp的json字符串解析
- C++的Json解析库:jsoncpp
- 用库 jsoncpp 解析 JSON
- 千里马是怎么变成废马的
- 有一种尊重叫:守口如瓶!
- 人际交往,简单明了最恰当,拖泥带…
- 怎样快速成为某个领域的"专家"?
- 和尚是怎么死的?让数万老板惊醒
- C++ Json解析 之 JsonCpp的详细运用细节
- 从办公桌一眼看穿你的工作性格
- 做人不要解释,这是智者的选择
- 水平面:篡命铜钱の2
- 相信别人的努力,看得起当下的自己
- "凡事看心情"会让你一事无成
- 在你看不清的脚下,正有能帮助你的…
- 职场中的自然"潜规则"
- 视野の从两个故事谈起——电风扇与空…