C++ JsonCpp
JsonCpp的下载与使用
Json官网上有各种语言关于Json的解析库。 从这个里面下载JsonCpp: https://github.com/open-source-parsers/jsoncpp jsoncpp-src-0.5.0从这儿下载:https://sourceforge.net/projects/jsoncpp/
嗯…我这里在github下载了好几个版本(因为有的是之前的版本有makefile文件,有些新的版本就没有makefile文件了,应该是需要自己cmake,另外不编译直接使用.cpp .h文件的时候,一些新版本在VS2013里面会报错,需要选择调整一下),看的相关博客里有提到使用JsonCpp的两种方式:
- 使用Jsoncpp生成的lib文件
- 使用Jsoncpp包中的.cpp和.h文件
尝试了这两种方法,坎坎坷坷,记录一下
1.使用Jsoncpp生成的lib文件(vs2013----jsoncpp-0.y.z)
1)编译连接
jsoncpp-0.y.z\makefiles\msvc2010
使用VS2013打开里面的.sln
分别在debug和release模式下:在“解决方案资源管理器”中右击lib_json选择->仅用于项目->仅生成lib_json
2)创建静态链接库SDK
上面需要的文件就生成了,建立一个文件夹(这个文件就是自己项目要使用含有.h和.lib文件的文件夹)
将jsoncpp-0.y.z\include\json中的.h文件全部复制到这个include文件夹下
将刚才编译生成的debug release目录下的.lib文件放入lib下的新建立的debug和release目录下。
3)项目中配置
- 项目/属性->C/C++ ->常规->附加包含目录->添加include文件夹:E:\projects\cplus_json_test\Jsoncpp_test\jsoncpp-0.y.z-sc\include
- 项目/配置属性->C/C++ -> 代码生成右边的“运行库”选择 MTd
- 项目/配置属性->连接器->常规 ->“附加库目录”添加lib文件夹:E:\projects\cplus_json_test\Jsoncpp_test\jsoncpp-0.y.z-sc\lib\debug
测试程序:
#include <iostream>
#pragma comment(lib,"lib_json.lib")
#include "json\json.h"
using namespace std;
int main()
{
const char* str = "{\"uploadid\": \"UP000000\",\"code\": 100,\"msg\": \"\",\"files\": \"\"}";
Json::Reader reader;
Json::Value root;
if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
{
std::string upload_id = root["uploadid"].asString(); // 访问节点,upload_id = "UP000000"
int code = root["code"].asInt(); // 访问节点,code = 100
cout << "upload_id: " << upload_id << endl;
cout << "code: " << code << endl;
}
getchar();
return 0;
}
2.使用Jsoncpp包中的.cpp和.h文件(VS2013----jsoncpp-src-0.5.0)
- 将在include文件夹下的
json文件
和src文件夹下lib_json文件
都拷贝到项目目录下。然后添加到项目中。
- 项目/属性->C/C++ ->常规->附加包含目录-> 添加含有json文件的文件夹E:\projects\cplus_json_test\myjsoncpp
- 在程序里包含头文件
#include "json\json.h"
- 将json_reader.cpp、json_value.cpp和json_writer.cpp三个文件的 Precompiled Header(预编译头) 属性设置为Not Using Precompiled Headers(不使用预编译头)
注:我这里使用jsoncpp-src-0.5.0,其他的会出现一些错误,有的需要使用VS2015以上的vs。若是版本对了还报错,在json_reader.cpp、json_value.cpp和json_writer.cpp最上面添加 #pragram once
测试程序类似
JsonCpp里的几个类
- Json::Value 表示各种类型的对象,支持的对象类型可见
Json::ValueType
枚举值,例如 int string object array等 - Json::Reader 读取,将Json文件或字符解析到Json::Value,主要函数有Parse
- Json::Write 纯虚类,不能直接使用,将Json::Value转化成字符串流,使用其子类
Json::FastWriter
(输出不带格式Json)Json::StyleWriter
(输出待格式的Json)
JsonCpp用法(链接)
很多这方面的:
JsonCpp
Windows10 VS2017 C++ Json解析(使用jsoncpp库)
C++的Json解析库:jsoncpp
一些参考:
vs2013 c++ 编译配置jsoncpp和使用jsoncpp解析json文件
(重要!!!)VS 2013 配置jsoncpp 库(亲测可行)