Qt读写文件

Qt读写INI配置文件

void WriteSettings()
{
    //QSettings settings("Software Inc", "Spreadsheet"); // windows在注册表中建立建 Software Inc -> Spreadsheet
    QSettings settings("Option.ini", QSettings::IniFormat); // 当前目录的INI文件
    settings.beginGroup("DevOption");
    settings.setValue("mainFun", 25);
    settings.setValue("subFun", 40);
    settings.setValue("service", 1);
    settings.endGroup();
}

void ReadSettings()
{
    QSettings settings("Option.ini", QSettings::IniFormat);

    int mainFun = settings.value("DevOption/mainFun").toInt();
    int subFun = settings.value("DevOption/subFun").toInt();
    QString service = settings.value("DevOption/service").toString();

    qDebug() << "service" << service;
    qDebug() << "mainFun" << mainFun;
    qDebug() << "subFun" << subFun;
}

int main(int argc,char *argv[])
{
    QCoreApplication a(argc, argv);

    WriteSettings();
    ReadSettings();
     
    return a.exec();
}
 

Qt读写XML文件

 

 

一、首先咱们得认识处理XML的方法有那些,QT提供了那些函数用于处理。

 

                     我们知道对XML的操作有两种方法,即DOM方式和SAX方式。二者主要区别是:DOM实现方式操作非常简单,但不适合处理过大文件;而SAX实现方式是能处理很大的XML文件,但是需要开发者写一些复杂的代码。Qt提供了对应于这两种用于读取、操作和编写XML的实现类,分别是QDomDocument类和QXmlStreamReader类,由于在项目中涉及的文件不大,因此我们选用QDomDocument类来

处理。

 

二、咱们需要了解XML文件的最常见格式:

 

         1、需要知道一个XML文件有且只有一个根节点;

         2、子节点与元素的概念,以及它们之间的联系(如何包含);

 

 

三、对XML文件创建,读取、修改:

 

 

1. 创建节点,将其写入XML文件,主要操作包括:

 

 


QDomDocument doc;

1).创建根节点:QDomElement root = doc.createElement("root")

2).创建元素节点:QDomElement element = doc.createElement("nodeName");

3).添加元素节点到根节点:root. appendChild(element);

4).创建元素文本:QDomText nodeText=doc.createTextNode("text");

5).添加元素文本到元素节点:element. appendChild(nodeText);

 

在本项目中,假设便签的属性有序号、名字、内容、字体、字号、颜色、粗细、斜体、下划线这几项,则在文件中添加一个便签节点的操作如下:

QDomDocument doc;

instruction = doc.createProcessingInstruction("xml","version="1.0" encoding="UTF-8"");

doc.appendChild(instruction);

QDomElement root = doc.createElement_x_x("Notes");

doc.appendChild(root);

QDomElement note = doc.createElement_x_x("note");

root.appendChild(note);

QDomElement no = doc.createElement_x_x("no");

note.appendChild(no);

...

...

QDomText no_text = doc.createTextNode("001");

...

...

则得到一个便签节点,将其保存到test.xml文件中,代码如下:

QFile file("test.xml");

if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text))

return ;

QTextStream out(&file);

out.setCodec("UTF-8");

doc.save(out,4,QDomNode::EncodingFromTextStream);

file.close();

则test.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<Notes>

<note>

<no>001</no>

<name>2010-05-10(13:53:24)</name>

<content>A meeting!</content>

<font>Script MT Bold</font>

<fontSize>16</fontSize>

<color> #00ffff</color>

<weight>0</weight>

<fontItalic>true</fontItalic>

<fontUnderline>true</fontUnderline>

</note>

</Notes>

上面是创建一个便签节点,若要继续添加便签节点,则需要在已有节点后增加一个新节点,并重写入XML文件。

 

2. 加载、查找便签时要读取XML文档中的节点信息,DOM实现方式是将整个文档当作一个对象来装入内存进行处理,然后开发者可以访问这个对象中的每一个节点,每一个节点对应XML文件里的一个标记。

 

主要操作包括:

1).读取根节点:QDomElement root = doc.documentElement();

2).读取第一个子节点:QDomNode node = root.firstChild();

3).读取下一个子节点:node = node.nextSibling();

4).匹配结点标记:node.toElement().tagName() == "note"

5).读取节点文本:no = childNode.toText().data();
//========================遍历节点================
可以通过doc.childNodes()获得doc的所有的子节点列表QDomNodeList。比如

QDomNodeList list=doc.childNodes();

for(int i=0;i<list.count();i++){

QDomNode node=list.at(i);//好的风格当然是把定义写在外面:(

//qDebug()<<”node name is “<<node.nodeName();

//qDebug()<<”node type is “<<.nodeType();

}


//==============================================

以下是项目中读取便签属性的函数实现代码:

void MainWindow::parseAttr(const QDomElement &element)

{

QString no,name,content,font,fontSize,color;

QDomNode node = element.firstChild();

while (!node.isNull()) {

if (node.toElement().tagName() == "note") {//匹配note节点

parseAttr(node.toElement());

} else if (node.toElement().tagName() == "no") {//匹配属性no

QDomNode childNode = node.firstChild();

if (childNode.nodeType() == QDomNode::TextNode) {

no = childNode.toText().data();

}

}

else if (node.toElement().tagName() == "name") //匹配属性name

...

...

node = node.nextSibling();//读取兄弟节点

}

}

3. 删除便签时,要删除相应的XML节点,用到的主要函数为:root.removeChild(node); 但在删除某个节点后要重写整个文件。

            以上对XML文件的重写操作是必须的,因此在文件的打开方式中要加上QIODevice::Truncate,表示覆盖重写。目前还没有找到可以直接修改文件的方法,但若文件很大的情况下,必须考虑相

应的效率问题。

 

 
4.读取XML文件内容:

//===================打开document===============add me ======
 QString xmlPath = "filename.xml";
 QFile file(xmlPath);
 if (!file.open(QFile::ReadOnly | QFile::Text))
  return ;

 QString errorStr;
 int errorLine;
 int errorColumn;

 QDomDocument doc;
 if (!doc.setContent(&file, false, &errorStr, &errorLine, &errorColumn))
  return ;
 file.close();
//也可以用doc.setContent(&file)带一个参数就行。
//=============================================================

然后按照上面方式遍历数据,修改后在以上面相同的方式写入到XML文件中。

//=========================================附加一段代码创建XML文件===============
#include <QApplication>
#include <QFile>
#include <QDomDocument>
#include <QTextStream>
#include <QTextCodec>
#include <QMessageBox>
int main (int argc,char **argv)
{
     QApplication a (argc,argv);
     QFile file("InitInfo.xml");
  if(!file.open(QFile::ReadOnly | QFile::Text))
  {
     // QMessageBox::information(this,tr("error"),tr("无法打开XML文件"));
      return 1; 
  }
 /*第一步,将file中的内容读入doc内存中*/  

   QDomDocument doc;

   doc.setContent(&file,false,&errorStr,&errorLine,&errorColumn);
   file.close();

 /*第二步,创建根节点*/
   QDomElement root = doc.createElement("root");     //创建根节点

 

 /*第三步:创建子节点和元素,并将元素加入相应节点内,最后将节点加入根节点中*/
  QDomElement element = doc.createElement("device3");     //创建第一个子节点

  element.setAttribute("ChildName","Content");

  QDomElement el_address = doc.createElement("Content");  //创建一个元素 该元素有三种属性
  el_address.setAttribute("key","equipmentname");
  el_address.setAttribute("value","CSC101B");
  el_address.setAttribute("name","itemName");

  element.appendChild(el_address);                       //将该元素增加到第一节点中.

  QDomElement el_path = doc.createElement("path");       //创建第二个元素,
  QDomText text_path = doc.createTextNode("aaa");         //创建该元素的文本
  el_path.appendChild(text_path);                        //将该元素文本增加到该元素中

  element.appendChild(el_path);                         //将该元素添加到第一个子节点中

  root.appendChild(element);                           //将该子节点加入到根节点下.


 QFile f("InitInfo.xml");
 if(!f.open(QFile::WriteOnly | QFile::Text))
  return 1;
  QTextStream out(&f);
  QTextCodec * codec = QTextCodec::codecForName("gbk");        //此处是设置文件支持的编码格式

  out.setCodec(codec);


  QString strHead("version =1.0 encoding =GB2312" );

  doc.appendChild(doc.createProcessingInstruction("xml" ,strHead ));
  out << doc.toString();
  root.save(out,2);
  f.close();

  return 0;

}

其它内容:

1 首先对XML文件进行操作,打开文件。

这个其实就是对文件进行操作,可以把它直接定义为构造函数,在对对象进行初始化时完成。

TopoDataReader::TopoDataReader(const wstring &filePath):_filePath(filePath),_qDomDoc("mydocument"),_qFile(QString::fromStdWString(filePath))
{
 if (!_qFile.open(QIODevice::ReadOnly))
 {
  return;
 }

 if (!_qDomDoc.setContent(&_qFile))
 {
  _qFile.close();
  return;
 }
}

2 读取XML文件中的节点内容

假设XML文件格式如下

(1)

<switchs>

<switch snmpip=211.87.235.136 newwork=front>

</switch>

</switchs>

(2)

<ip>211.87.235.136</ip>

对于第一种情况,采用如下方法:

QDomElement docElem = _qDomDoc.documentElement();

QDomNode nodeswitch=docElem.elementsByTagName("switch ");//红色的为标签名

QDomElement elemnodeswitch=nodeswitch.toElement();

string snmpip=qPrintable(elemnodeswitch.attribute("snmpip"));//network的也是如此方法获取

对于第二种情况,采用如下方法:

直接调用text() API就可以了

string ip=qPrintable(elementnodeip.text());

但是,假设文件中有多个同样的节点,如下

<a>

<b></b>

<b></b>

</a>

这样用elementsByTagName("b")返回的就是一个childNodes()而不是一个单独的node了。

我们可以使用at()方法具体定位。

另外,我们还可以使用这样一种方法获取节点的值,假设XML文件如下

- +<switch snmpIp="192.168.120.251" network="front">
<name>前端主交换机</name>
<description />
- <ipList>
<ip>192.168.120.251</ip>
</ipList>
<rwCommunity>public@120</rwCommunity>
<workMode>true</workMode>
<workStatus>true</workStatus>
<enableAlarm>true</enableAlarm>
<snmpCount>0</snmpCount>
<memoryUtilizationRatio>50.0</memoryUtilizationRatio>
<cpuUtilizationRatio>50.0</cpuUtilizationRatio>
<port>161</port>
<snmpStatus>true</snmpStatus>
<privateName>CZ-5_FA</privateName>
<switchIndex>topLeft</switchIndex>
</switch>


我们可以先获取switch节点,然后得到其childNodes(),于是就可以使用at()方法来获取下面的每个节点了(注:从0开始)

比如说,上面的那个ip节点就是nodeswitch.childNodes().at(3)。

这样做得好处就是不用担心重复的问题,只要你确定switch节点确定对了,底下的也就一定能确定了。

3 返回某个节点下子节点的个数

这个简单,也是直接调API

QDomElement docElem = _qDomDoc.documentElement();
QDomNode nodetagname=docElem.elementsByTagName(tagname).at(0);//假设有多个tagname此处选第一个
int num=nodetagname.childNodes().size();

 

Qt读写XML文件例子

bool UIPublicOperate::readSettings(QHash<QString,QString> &content,QString filename)
{    
    if(filename.isEmpty())
        return false;
    QFile file(filename);
    if(!file.open(QFile::ReadOnly|QFile::Text))
    {
        return false;
    }
 
    QDomDocument document;
    QString error;
    int row = 0,column = 0;
    if(!document.setContent(&file,false,&error,&row,&column))
    {
        return false;
    }
    if(document.isNull())
    {
        return false;
    }
 
    QDomElement root = document.documentElement();
    QDomNodeList list = root.childNodes();
    int count = list.count();
 
    for(int i = 0; i<count;i++)
    {
        QDomNode dom_node = list.item(i);
        QDomElement element = dom_node.toElement();
        QString element_name = element.tagName();
        QString element_text = element.text();
        content.insert(element_name,element_text);
    }
 
    return true;
}
 
bool UIPublicOperate::writeSettings(QHash<QString,QString> content,QString filename)
{
    QDomDocument doc;
    QDomProcessingInstruction instruction;
    instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
    doc.appendChild(instruction);
 
    QDomElement root = doc.createElement(filename.remove(".xml"));
    doc.appendChild(root);
 
    QHash<QString,QString>::iterator mi;
    for(mi = content.begin();mi!=content.end();mi++)
    {
        QDomElement nodecontent = doc.createElement(mi.key());
        QDomText textcontent = doc.createTextNode(mi.value());
        nodecontent.appendChild(textcontent);
        root.appendChild(nodecontent);
    }
    QFile file("settings.xml");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate|QIODevice::Text))
        return false;
    QTextStream out(&file);
    out.setCodec("UTF-8");
    doc.save(out,4,QDomNode::EncodingFromTextStream);
    file.close();
    return true;
 

}

Qt读写Json

 
      JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
 
常用的Json库
  • JsonCpp
    JsonCpp是一个C++用来处理JSON数据的开发包。
    网址: http://jsoncpp.sourceforge.net/.
  • cJSON
    cJSON是一个超轻巧,携带方便,单文件,简单的可以作为ANSI-C标准的JSON解析器。
  • 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:5
windows: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
        {
    QJsonValue value = array.at(i);
    if(value.isString())
    {
QString name = value.toString();
    }
    else if(value.isBool())
    {
bool flag = value.toBool();
    }
}
    }
}

 

 
结果:
数组不同下标对应的值
0:Qt
1:version
2:true
 
    如上,简单介绍一下常用的JSON库以及Qt中对JSON的生成与解析,如需更多资料请参考官方文档,还是那句话,没有比助手更好、更专业的资料了!
 
注:
    技术在于交流、沟通,转载请注明出处并保持作品的完整性。

例子:

//解包
bool            jsonpack(QString & data,QByteArray byte_array);
bool            jsonpack(QString &data);
bool            jsonpack(QByteArray &data,HBookingInfoVeryDay &bookinginfo,int type);
//组包
bool            jsonparse(QByteArray &byte_array);
bool            jsonparse(QString & data,QByteArray &byte_array);
bool            jsonparse(QByteArray &data,HBookingInfoVeryDay &bookinginfo,int type);

bool PublicOperate::writeSettings(QHash<QString,QString> content,QString filename)
{
    QDomDocument doc;
    QDomProcessingInstruction instruction;
    instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
    doc.appendChild(instruction);


    QDomElement root = doc.createElement(filename.remove(".xml"));
    doc.appendChild(root);


    QHash<QString,QString>::iterator mi;
    for(mi = content.begin();mi!=content.end();mi++)
    {
        QDomElement nodecontent = doc.createElement(mi.key());
        QDomText textcontent = doc.createTextNode(mi.value());
        nodecontent.appendChild(textcontent);
        root.appendChild(nodecontent);
    }
/*
    QDomElement nodeMCU = doc.createElement("MCU");
    QDomElement nodeService = doc.createElement("Service");
    QDomElement nodeClient = doc.createElement("Client");
    QDomElement nodeMaster = doc.createElement("Master");
    QDomElement nodeLocal = doc.createElement("Local");


    root.appendChild(nodeMCU);
    root.appendChild(nodeService);
    root.appendChild(nodeClient);
    root.appendChild(nodeMaster);
    root.appendChild(nodeLocal);


    QDomText textMCU = doc.createTextNode("MCU");
    QDomText textService = doc.createTextNode("Service");
    QDomText textClient = doc.createTextNode("Client");
    QDomText textMaster = doc.createTextNode("Master");
    QDomText textLocal = doc.createTextNode("Local");


    nodeMCU.appendChild(textMCU);
    nodeService.appendChild(textService);
    nodeClient.appendChild(textClient);
    nodeMaster.appendChild(textMaster);
    nodeLocal.appendChild(textLocal);*/
    QFile file("settings.xml");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate|QIODevice::Text))
        return false;
    QTextStream out(&file);
    out.setCodec("UTF-8");
    doc.save(out,4,QDomNode::EncodingFromTextStream);
    file.close();
    return true;
}


bool PublicOperate::jsonpack(QString & data,QByteArray byte_array)
{
    QString name;
    int version;
    bool flag;
    QJsonParseError json_error;
    QJsonDocument pars_document = QJsonDocument::fromJson(byte_array,&json_error);
    if(json_error.error == QJsonParseError::NoError)
    {
        if(pars_document.isObject())
        {
            QJsonObject obj = pars_document.object();
            if(obj.contains("name"))
            {
                QJsonValue name_value = obj.take("name");
                if(name_value.isString())
                {
                    name = name_value.toString();
                }
            }
            if(obj.contains("version"))
            {
                QJsonValue version_value = obj.take("version");
                if(version_value.isDouble())
                {
                    version = version_value.toVariant().toInt();
                }
            }
            if(obj.contains("windows"))
            {
                QJsonValue version_value = obj.take("windows");
                if(version_value.isBool())
                {
                    flag = version_value.toBool();
                }
            }
        }
    }
    return true;
}


bool PublicOperate::jsonpack(QString &data)
{
    /*
    QJsonParseError json_error;
    QJsonDocument parse_document = QJsonDocument::fromJson(byte_array,&json_error);
    if(json_error.error == QJsonParseError::NoError)
    {
        if(parse_document.isArray())
        {
            QJsonArray array = parse_document.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();
                }
                else if(value.isDouble())
                {
                    int version = value.toInt();
                }
                else if(value.isArray())
                {
                    int aaa = 0;
                }
            }
        }
    }
    */


    //QByteArray byte_array
    //QByteArray byte_array
    bool bRet = false;


    QJsonParseError json_error;
    QJsonDocument parse_document = QJsonDocument::fromJson(data.toUtf8(),&json_error);


    if(json_error.error == QJsonParseError::NoError)
    {
        if(parse_document.isObject())
        {
            if(parse_document.isObject())
            {
                QJsonArray array = parse_document.array();
                int size = array.count();
                QJsonObject obj= parse_document.object();
                size = obj.count();
                QJsonObject::iterator it;


                int count = 0;
                for(it = obj.begin();it!=obj.end();)
                {
                    count++;
                    QString key = QString("%1").arg(it.key());
                    key = key.trimmed();


                    QJsonValue jsonValue = obj.take(key);


                    if(jsonValue.isString())
                    {
                        qDebug()<<"--------isString-key-"<<QString("key[%1] value[%2]").arg(key).arg(jsonValue.toString());


                    }
                    if(jsonValue.isBool())
                    {
                        qDebug()<<"--------isString-key-"<<QString("key[%1] value[%2]").arg(key).arg(jsonValue.toBool());


                    }
                    if(jsonValue.isDouble())
                    {
                        qDebug()<<"--------isString-key-"<<QString("key[%1] value[%2]").arg(key).arg(jsonValue.toInt());


                    }
                    else if(jsonValue.isArray())
                    {
                        qDebug()<<"--------isArray-key-"<<QString("key[%1])").arg(key);


                        QJsonArray array = jsonValue.toArray();
                        qDebug()<<array.count();


                        for(int j=0;j<array.count();j++)
                        {
                            QJsonObject object = array[j].toObject();
                            size = object.count();
                            QJsonObject::iterator it1;
                            for(it1 = object.begin();it1!=object.end();)
                            {
                                QString key = it1.key();
                                qDebug()<<"--------it1-key-"<<it1.key();


                                QJsonValue jsonItem = object.take(key);
                                if(jsonItem.isString())
                                {
                                    qDebug()<<"--------strItem-key-"<<QString("key[%1] value[%2]").arg(key).arg(jsonItem.toString());


                                }
                                if(jsonItem.isBool())
                                {
                                    qDebug()<<"--------strItem-key-"<<QString("key[%1] value[%2]").arg(key).arg(jsonItem.toBool());


                                }
                                if(jsonItem.isDouble())
                                {
                                    qDebug()<<"--------strItem-key-"<<QString("key[%1] value[%2]").arg(key).arg(jsonItem.toInt());


                                }




                            }
                        }
                    }
                    else if(jsonValue.isObject())
                    {
                        qDebug()<<"--------isobject";
                    }


                }
            }
        }
    }






    return bRet;
}


bool PublicOperate::jsonpack(QByteArray &data, HBookingInfoVeryDay &bookinginfo, int type)
{
    bool bRet = false;


      return bRet;
}


bool PublicOperate::jsonparse(QByteArray &byte_array)
{
    QJsonObject json;
    json.insert("name",QString("Qt"));
    json.insert("version",5);
    json.insert("windows",true);


    QJsonDocument document;
    document.setObject(json);
    byte_array = document.toJson(QJsonDocument::Compact);
    QString json_str(byte_array);
    qDebug()<<"--------json_str-----"<<json_str;
    return true;
}


bool PublicOperate::jsonparse(QString &data, QByteArray &byte_array)
{


    QJsonObject json;


    QJsonObject jsonobj1;
    jsonobj1.insert("name",QString("Qt"));
    jsonobj1.insert("version",5);
    jsonobj1.insert("windows",true);
    QJsonObject jsonobj2;
    jsonobj2.insert("name",QString("Qt"));
    jsonobj2.insert("version",5);
    jsonobj2.insert("windows",true);


    QJsonArray jsonarray;
    jsonarray.insert(0,jsonobj1);
    jsonarray.insert(1,jsonobj2);


    json.insert("content",jsonarray);
    json.insert("id",QString("Qt"));
    json.insert("count",5);
    json.insert("detail",true);


    QJsonDocument document;
    document.setObject(json);
    byte_array = document.toJson(QJsonDocument::Compact);
    data = QString(byte_array);
    QString json_str(byte_array);
    qDebug()<<"---------json_str_array---"<<json_str;


    /*
    QJsonArray json;
    json.insert(0,QString("Qt"));
    json.insert(1,5);
    json.insert(2,true);


    QJsonDocument document;
    document.setArray(json);
    byte_array = document.toJson(QJsonDocument::Compact);
    QString json_str(byte_array);
    qDebug()<<"---------json_str_array---"<<json_str;
    */
    return true;
}


bool PublicOperate::jsonparse(QByteArray &data,HBookingInfoVeryDay &bookinginfo,int type)
{
    bool bRet = true;


    QJsonObject json;
    json.insert("date",bookinginfo.m_strDate);
    json.insert("bookcount",bookinginfo.m_nBookcount);


    QJsonArray arrayApp;
    QHash<QString,HBookingInfo>::iterator mi;
    for(mi = bookinginfo.m_hashBookingInfo.begin();mi!=bookinginfo.m_hashBookingInfo.end();mi++)
    {
        QJsonObject jsonchild;
        jsonchild.insert("begintime",mi.value().m_strBeginTime);
        jsonchild.insert("endtime",mi.value().m_strEndTime);
        jsonchild.insert("subject",mi.value().m_strSubject);
        jsonchild.insert("theme",mi.value().m_strTheme);
        jsonchild.insert("abstract",mi.value().m_strAbStract);
        jsonchild.insert("status",mi.value().m_bStatus);
        jsonchild.insert("classcount",mi.value().m_nClassCount);


        QJsonArray arrayChild;
        QHash<QString,HClassInfo>::iterator mj;
        for(mj = mi.value().m_hashClassInfo.begin();mj!=mi.value().m_hashClassInfo.end();mj++)
        {
            QJsonObject jsongrandson;
            jsongrandson.insert("id",mj.value().m_strID);
            jsongrandson.insert("ip",mj.value().m_strIP);
            jsongrandson.insert("name",mj.value().m_strName);
            jsongrandson.insert("detail",mj.value().m_strDetail);
            jsongrandson.insert("identity",mj.value().m_strDetail);
            arrayChild.append(jsongrandson);
        }
        jsonchild.insert(mi.key(),arrayChild);
        arrayApp.append(jsonchild);
    }


    json.insert("content",arrayApp);
    QJsonDocument document;
    document.setObject(json);
    QByteArray byte_array = document.toJson(QJsonDocument::Compact);
    QString json_str(byte_array);


    data = json_str.toUtf8();
    qDebug()<<"-------"<<data;


    return bRet;
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值