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;
}

posted on 2021-05-31 09:27  lodger47  阅读(319)  评论(0)    收藏  举报

导航