Qt中使用RapidJSON
RapidJSON 是一个 C++ 的 JSON 解析器及生成器。它的灵感来自 RapidXml。
(图片来源网络,侵删)
RapidJSON 小而全。它同时支持 SAX 和 DOM 风格的 API。SAX 解析器只有约 500 行代码。
http://rapidjson.org/zh-cn/官网
使用代码如下:实现Document转出到QVariantMap
#include #include "rapidjson/document.h" #include "rapidjson/writer.h" #include "rapidjson/stringbuffer.h" #include #include "handlerapidjson.h" #include #include #include using namespace rapidjson; QString getString(rapidjson::Document &doc, QString key) { QString str = ""; if (doc.HasMember(key.toLocal8Bit().data()) && doc[key.toLocal8Bit().data()].IsString()) { str = QString::fromLocal8Bit(doc[key.toLocal8Bit().data()].GetString()); } return str; } QString getStringFromObj(rapidjson::Value& obj, QString key) { QString str = ""; if (obj.HasMember(key.toLocal8Bit().data()) && obj[key.toLocal8Bit().data()].IsString()) { str = QString::fromLocal8Bit(obj[key.toLocal8Bit().data()].GetString()); } return str; } QString valueToString(const rapidjson::Value &objValue) { QString rstr; if (objValue.IsString()) { rstr = QString(objValue.GetString()); } else if (objValue.IsInt()) { rstr = QString("%1").arg(objValue.GetInt()); } else if (objValue.IsDouble()) { rstr = QString("%1").arg(objValue.GetDouble()); } else if (objValue.IsBool()) { rstr = QString("%1").arg(objValue.GetBool()); } else if (objValue.IsNumber()) { rstr = QString("%1").arg(objValue.GetInt64()); } else if (objValue.IsInt64()) { rstr = QString("%1").arg(objValue.GetInt64()); } return rstr; } QVariantMap pareDoc(rapidjson::Document &document) { //暂时只支持一层 QVariantMap rmap; for (rapidjson::Value::ConstMemberIterator itr = document.MemberBegin(); itr != document.MemberEnd(); ++itr) { const rapidjson::Value& objKey = itr->name; const rapidjson::Value& objValue = itr->value; QString key = QString(objKey.GetString()); QString valuestr; if (objValue.IsObject()) { QVariantMap objmap; for (rapidjson::Value::ConstMemberIterator objIt = itr->value.MemberBegin(); objIt != itr->value.MemberEnd(); ++objIt) { const rapidjson::Value& childobjKey = objIt->name; const rapidjson::Value& childobjValue = objIt->value; QString childkey = QString(childobjKey.GetString()); QString childvaluestr = valueToString(childobjValue); objmap.insert(childkey, childvaluestr); } rmap.insert(key,objmap); } else if (objValue.IsArray()) { QVariantList tmplist; for (rapidjson::SizeType i = 0; i name; const rapidjson::Value& childobjValue = objIt->value; QString childkey = QString(childobjKey.GetString()); QString childvaluestr = valueToString(childobjValue); objmap.insert(childkey, childvaluestr); } tmplist
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。