jsoncpp库使用
windows安装
-
windows 下的安装
-
在windows下 将
jsoncpp-0.10.7.tar.gz
解压缩 -
进入到解压目录
jsoncpp-0.10.7
, 在进入到子目录makefiles\msvc2010
-
使用
vs
打开项目文件jsoncpp.sln
-
编译该项目, 生成库文件(点击右键重新生成)
-
生成的静态库存储目录
jsoncpp-0.10.7\makefiles\msvc2010\Debug
-
生成的静态库文件:
lib_json.lib
-
使用的准备工作:
- 将静态库
lib_json.lib
拿出备用 - 将库对应的头文件拿出, 头文件目录
jsoncpp-0.10.7\include\json
- 将静态库
-
vs编译过程中, 修改属性
-
Linux 下的安装
-
Linux 下的安装
-
准备安装包
jsoncpp-0.10.7.tar.gz
scons-3.0.5.zip
-
解压缩
$ tar zxvf jsoncpp-0.10.7.tar.gz $ unzip scons-3.0.5.zip
-
安装scons -> 进入
scons-3.0.5.zip
的解压目录$ python setup.py install
-
安装 jsoncpp -> 进入
jsoncpp-0.10.7.tar.gz
的解压目录$ scons platform=linux-gcc # 将生成的动态库/静态库拷贝到系统的库目录中, 需要管理员权限 $ cp libs/linux-gcc-4.8.5/* /lib # 拷贝json的头文件到系统目录中, 需要管理员权限 $ cp include/json/ /usr/include/ -r # 创建动态库的链接文件, 需要管理员权限 ln -s /lib/libjson_linux-gcc-4.8.5_libmt.so /lib/libjson.so # 更新, 这样才能搜索到动态库 libjson.so。需要管理员权限 $ ldconfig # 测试 $ ./bin/linux-gcc-4.8.5/test_lib_json Testing ValueTest/checkNormalizeFloatingPointStr: OK Testing ValueTest/memberCount: OK Testing ValueTest/objects: OK Testing ValueTest/arrays: OK .................. Testing BuilderTest/settings: OK Testing IteratorTest/distance: OK Testing IteratorTest/names: OK Testing IteratorTest/indexes: OK All 53 tests passed
-
编译 c++ 测试文件: json-test.cpp
$ g++ json-test.cpp -ljson -o json
-
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <json.h>
#include <fstream>
using namespace std;
// 包含jsoncpp命名空间
using namespace Json;
// 写json文件
void writeJson()
{
// 组织数据-》 放到Value对象中
Value root; // 最外层的json数组
// json数组中添加元素
root.append(12);
root.append(13.45f);
root.append("hello,world");
root.append(true);
root.append(false);
// 创建新的数组
Value sub;
sub.append(1);
sub.append(2);
sub.append("aa");
// 创建Object对象
Value obj;
obj["a"] = "b";
root.append(sub);
root.append(obj);
// 将value对象格式化->string
//string json = root.toStyledString();// 有格式
FastWriter w;// 无格式
string json = w.write(root);
// 写入磁盘文件
//ofstream ofs("test.json");
ofstream out;
out.open("test.json");
out << json;
out.close();
}
// 读json文件
void readJson()
{
// 打开磁盘文件
ifstream ifs("test.json");
Reader r;
Value root;
r.parse(ifs, root);
// 通过root对象取数据
if (root.isArray())
{
// 遍历数组
Value sub;
for (int i = 0; i < root.size();++i)
{
sub= root[i];
if (sub.isInt())
{
cout << sub.asInt() << endl;
}
else if (sub.isString())
{
cout << sub.asString() << endl;
}
else if (sub.isBool())
{
cout << sub.asBool() << endl;
}
else if (sub.isDouble())
{
cout << sub.asDouble() << endl;
}
else if (sub.isArray())
{
for (int j = 0; j < sub.size(); j++)
{
Value subs = sub[j];
if (subs.isInt())
{
cout << "------" << subs.asInt() << endl;
}
else if (subs.isString())
{
cout << "------" << subs.asString() << endl;
}
else if (subs.isBool())
{
cout << "------" << subs.asBool() << endl;
}
else if (subs.isDouble())
{
cout <<"------"<< subs.asDouble() << endl;
}
}
}
else if (sub.isObject())
{
cout << sub["a"].asString() << endl;
}
}
}
}
int main()
{
//writeJson();
readJson();
return 0;
}