Qt自带Json,Jsoncpp和json for modern c++

windows下cpp解析json文件暂时找到三种方法:jsoncppQJsonjson for modern c++

jsoncpp

安装

git clone https://github.com/open-source-parsers/jsoncpp
cd jsoncpp
mkdir build && cd build
cmake ..
make

把生成的bin、include、lib目录拷贝到工程引用的位置。

使用

Json::Value

分array(json数组)、null、int、real(double)、string、bool、object(json对象)
对象类型通过value.type()获取或者bool isBool()这类方法获得。

Json::Reader

读取类

void read(std::string _JsinFile) {
	std::ifstream ifsJson(_JsinFile, std::ios::binary);
	Json::Reader reader;
	Json::Value root;
	if (!reader.parse(ifsJson, root))
		return;
	Json::Value::Members members = root.getMemberNames();
	for (Json::Value::Members::iterator it = members.begin(); it != members.end(); it++) {
		std::string key = it->c_str();
		for (auto member : *it) {
			/*遍历取值*/
		}
	}
}
Json::FastWriter

快速写入类

std::string FastConstructJson() {
	Json::Value root = Json::objectValue;
	root["name"] = "xjy";
	root["age"] = 23;
	root["job"] = Json::objectValue;
	root["job"]["occupation"] = "wangguan";
	return Json::FastWriter().write(root);
}//将这个Json对象返回为一个字符串

JSON for Modern C++

Releases · nlohmann/json (github.com)
环境安装:上面的git仓库拉取源代码,然后把json-develop\include\nlohmann这个文件夹拷贝到项目引用目录,无需引用第三方库。
使用的时候:

#include "json.hpp"
//或
#include "nlohmann/json.hpp"

使用上比jsoncpp、Qt自带的json解析器都直观方便,使用样例:

using json = nlohmann::json;
void jsonfunc(){
	json j;
	j["name"]="jingyao";
	j["age"]=23;
	j["array"]={1,2,3};
	j["obj"]={{"city","hangzhou"},{"have_a_job",true}};
	//另一种写法
	json js={
		{"name","xjy"},
		{"age",23},
		{"array",{1,2,3}},
		{"obj",{
			{"city","hangzhou"},
			{"have_a_job",true}
		}}
	};
	
}

读取、写入可以依赖文件流的方式进行:

	json j;
	std::ifstream ifs("test.json");
	ifs >> j;

	std::ofstream ofs("output.json");
	ofs << std::setw(4)<<j<<std::endl;

QJson

类名功能
QJsonDocument读、写json文件
QJsonQbject与Json对象相对应,封装Jsond对象
QJsonValue封装Json值
QJsonArray封装Json数组

使用例子:

void read(std::string _jsonFile)
{
	QFile file(QString::fromStdString(_jsonFile));
	set_m_JsonFile(file.fileName());
	file.open(QFile::ReadOnly);
	if (!file.isOpen()) return;
	_all = file.readAll();
	file.close();
	QByteArray _all;
    QJsonParseError jsonError;
    QJsonDocument document = QJsonDocument::fromJson(_all, &jsonError);
    if ((QJsonParseError::NoError == jsonError.error) &&(!document.isNull()))
    {
        if (document.isObject())
        {
            QJsonObject obj = document.object();
            QStringList keys = obj.keys();
            for (auto t:obj) {
            {
            /*正常情况下要判断类型然后进行赋值,这里就不展开了*/
	            static int i = 0;
	            qDebug() << t.type() << keys.at(i) << " " << obj.value(keys.at(i++));
            }
        }
        else {}
    }else{}
}

void write(std::string _JSonFile){
	QJsonObject obj;
	obj.insert("name",QString("xjy"));
	obj.insert("sex",QString("man"));
	obj.insert("age",23);
	QJsonObject subobj;
	subobj.insert("occupation",QString("programmer"));
	obj.insert(subobj);
	QFile file(QString::fromStdString(_jsonFile));
	file.open(QFile::WriteOnly);
	if(!file.isOpen()) return;
	file.write(json);
	file.close();
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值