JsonCpp使用方法及示例

下载

使用静态库/动态库

linux:

mkdir  build
cd build
cmake -DCMAKE_BUILD_TYPE=release -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=ON -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" ..
make

windows: 下载cmake 编译

使用源文件

在项目目录中直接执行

python amalgamate.py

会在dist目录下生成两个头文件和一个源文件json-forwards.h 、json.h和jsoncpp.cpp; 直接放到工程中其他代码一起编译即可。

demo

头文件

#include <iostream>
#include "json/json.h"
#include <fstream>

创建

保存

void MPT_test_saveJson(std::string file, std::string& jsonStr)
{
	std::ofstream ofs;
	ofs.open(file);
	if (!ofs.is_open())
	{
		std::cout << "open json file failed." << std::endl;
		return;
	}
	ofs << jsonStr;
	ofs.close();
	return;
}

读取

修改

void MPT_test_changeJson(std::string file) {
	std::ifstream ifs;
	ifs.open(file, std::ios::in);
	if (!ifs.is_open())
	{
		std::cout << "open json file failed." << std::endl;
		return;
	}

	Json::CharReaderBuilder reader;
	Json::Value root;

	JSONCPP_STRING errs;

	bool res = Json::parseFromStream(reader, ifs, &root, &errs);
	if (!res || !errs.empty())
	{
		std::cout << "parseJson error! " << errs << std::endl;
		return;
	}

	root["Age"] = 30;
	root["Name"] = "Liangbaikais liangbaikai";
	root["fruit"][0] = "strawberry";
	ifs.close();

	std::ofstream os;
	os.open(file, std::ios::out);
	if (!os.is_open())
	{
		std::cout << "open json file failed." << std::endl;
		return;
	}
	Json::StreamWriterBuilder builder;
	std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
	writer->write(root, &os);
	return;
}

main

int main()
{
	std::string jsonStr = MPT_test_createJson();
	MPT_test_saveJson("../json/json-none.json", jsonStr);
	MPT_test_readJson("../json/json-none.json");
	MPT_test_changeJson("../json/json-none.json");
	return 0;
}
经验分享 程序员 微信小程序 职场和发展