uuhua的个人主页

http://www.qtcn.org/bbs/u/136486  [收藏] [复制]

uuhua

  • 4

    关注

  • 7

    粉丝

  • 20

    访客

  • 等级:新手上路
  • 总积分:16
  • 保密,1985-11-01

最后登录:2018-04-24

更多资料

日志

Qt之JSON生成与解析

2015-02-04 10:50
常用的Json库
  • JsonCpp

    JsonCpp是一个C++用来处理JSON数据的开发包。
    网址:http://jsoncpp.sourceforge.net/.
  • cJSON

    cJSON一个超轻巧,携带方便,单文件,简单的可以作为ANSI-C标准的JSON解析器。
    网址:http://sourceforge.net/projects/cjson/.
  • QJson

    QJson是一个基于Qt的开发包用来将JSON数据解析成QVariant对象,JSON的数组将被映射为QVariantList实例,而其他对象映射为QVariantMap实例。
    网址:http://qjson.sourceforge.net/.


    关于Qt中对JSON的生成与解析,Qt5以前的版本,需要去进行单独下载、编译,才能使用。到了Qt5,提供了专门的QJsonDocument类来读取和写入JSON文档。

Qt5中JSON的生成与解析

  • QJsonDocument

    QJsonDocument既可以从一个基于文本表示的UTF-8编码,又可以从Qt自己的二进制格式读取和写入这个文件。
    JSON文档可以从它的基于文本的表示使用QJsonDocument::fromJson()转换为QJsonDocument,用.toJSON()将其转换回文字。解析器非常快速和高效,将JSON转换为二进制表示。
  • QJsonObject

    QJsonObject类用于封装JSON对象。    JSON对象是键值对,其中键是唯一的字符串,其值由QJsonValue代表。一个QJsonObject可以从QVariantMap转换/被转换。
  • QJsonArray


    QJsonArray类用于封装JSON数组。
    一个JSON数组列表值。该列表可以通过从阵列插入和移除QJsonValue的操纵。一个QJsonArray可以从QVariantList转换为/被转换。



    QJsonDocument有效解析后的文档可以使用!iSNull()判断。使用isArray()和isObject()来判断是否包含一个数组或对象。文档中包含的数组或对象可以使用array()或object()进行检索,然后读取或操纵。

示例QJsonObject
(1)生成Json
QJsonObject json;
json.insert("name", QString("Qt"));
json.insert("version", 5);
json.insert("windows", true);
QJsonDocument document;
document.setObject(json);
QByteArray byte_array = document.toJson(QJsonDocument::Compact);
QString json_str(byte_array);
结果:json_str:{"name": "Qt","version": 5,"windows": true}
(2)解析Json
QJsonParseError json_error;
QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, &json_error);
if(json_error.error == QJsonParseError::NoError)
{  
    if(parse_doucment.isObject())
      {  
        QJsonObject obj = parse_doucment.object();
         if(obj.contains("name"))  
        {      
                QJsonValue name_value = obj.take("name");
                 if(name_value.isString())
                    {
                          QString name = name_value.toString();
                    }
         }
      if(obj.contains("version"))
     {  
          QJsonValue version_value = obj.take("version");
          if(version_value.isDouble())
          {    
               int version = version_value.toVariant().toInt();
          }
      }
     if(obj.contains("windows"))
     {
            QJsonValue version_value = obj.take("windows");
            if(version_value.isBool())
           {
                bool flag = version_value.toBool();
           }
      }
    }
}  
结果:name:Qt
version:5windows:true
QJsonArray(1)生成Json
QJsonArray json;json.insert(0, QString("Qt"));json.insert(1, QString("version"));json.insert(2, true);
QJsonDocument document;document.setArray(json);QByteArray byte_array = document.toJson(QJsonDocument::Compact);QString json_str(byte_array);
结果:json_str:["Qt","version",true]
(2)解析Json
QJsonParseError json_error;QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, &json_error);
if(json_error.error == QJsonParseError::NoError)
{  
    if(parse_doucment.isArray())
      {  
            QJsonArray array = parse_doucment.array();
            int size = array.size();
            for(int i=0; i<size;i++)
            {
                     QJsonValue value = array.at(i);
                     if(value.isString())
                       {
                           QString name = value.toString();
                     }
                     else if(value.isBool())
                     {
                          bool flag = value.toBool();
                    }
            }
    }
}
结果:数组不同下标对应的值
0:Qt1:version
2:true

http://blog.sina.com.cn/s/blog_a6fb6cc90101gnxm.html
分类:默认分类|回复:0|浏览:1500|全站可见|转载
 

下一篇: suse 下布署Qt程序问题

上一篇: Qt 发布问题

Powered by phpwind v8.7 Certificate Copyright Time now is:05-18 05:30
©2005-2016 QTCN开发网 版权所有 Gzip disabled