QT学习之QScript
来源:互联网 发布:智尚网络 培训 编辑:程序博客网 时间:2024/05/21 02:36
http://www.cnblogs.com/lomper/p/4138281.html
QT中有解析Json的一个类叫QScript。貌似还有一个QJson,但听说解析的方便性不如QScript,具体没有深入探究,这里仅简单记录一下QScript的使用。
下面是debug中的结果:
" billcount : 2"" bills [ "" billID : 010101001"" billname : billname11"" billunit : m2"" decount : 3"" des [ "" deID : A1-1"" decont : decont111"" dename : dename111"" deunit : 100m2"" deID : A1-3"" decont : decont111"" dename : dename111"" deunit : 100m3"" deID : A1-4"" decont : decont111"" dename : dename111"" deunit : 100m3"" des ] "" billID : 010101005"" billname : billname111"" billunit : m3"" decount : 1"" des [ "" deID : A1-27"" decont : decont111"" dename : dename111"" deunit : 100m3"" des ] "" bills ] "
<p style="margin-top: 0px; margin-bottom: 0px;"><span style=" font-family:'Courier'; font-size:11pt; color:#aa00aa;">itsv "_data" "_data" "[object Object]"</span></p><p style="margin-top: 0px; margin-bottom: 0px;"><span style=" font-family:'Courier'; font-size:11pt; color:#aa00aa;">sv "[object Object]"</span></p><p style="margin-top: 0px; margin-bottom: 0px;"><span style=" font-family:'Courier'; font-size:11pt; color:#aa00aa;">sptdataV "[object Object]"</span></p><p style="margin-top: 0px; margin-bottom: 0px;"><span style=" font-family:'Courier'; font-size:11pt; color:#aa00aa;">sptdataV "helloworldvalue" "helloworldvalue" "0.4907147960205781"</span></p>
下面是helloworldjson.xml中的结果:
<?xml version="1.0" encoding="UTF-8"?><BillTable billcount="2"> <bills> <BillItem billID="010101001" billname="billname11" billunit="m2" decount="3"> <des> <DesItem deID="A1-1" decont="decont111" dename="dename111" deunit="100m2"/> <DesItem deID="A1-3" decont="decont111" dename="dename111" deunit="100m3"/> <DesItem deID="A1-4" decont="decont111" dename="dename111" deunit="100m3"/> </des> </BillItem> <BillItem billID="010101005" billname="billname111" billunit="m3" decount="1"> <des> <DesItem deID="A1-27" decont="decont111" dename="dename111" deunit="100m3"/> </des> </BillItem> </bills></BillTable>下面是代码:
AHeaders.h:
#ifndef AHEADERS_H#define AHEADERS_H #include <QDebug>#include <QVariant>#include <QString>#include <QStringList>#include <QXmlStreamWriter>#define dbgtx qDebug() #endif // AHEADERS_H
qscriptjson.h:
<pre name="code" class="cpp">#ifndef QSCRIPTJSON_H#define QSCRIPTJSON_H #include <QScriptEngine>#include <QScriptValue>#include <QScriptValueIterator>#include <QFile>#include <QMap>#include "AHeaders.h" class QScriptJson{public: QScriptJson(const QString &fileName); ~QScriptJson(); bool write2File(); void selfTestFunc(QString str);private: void getPropety(QScriptValue sv, QStringList sLsPty);//输出到XML void getPropety(QScriptValue sv, QStringList sLsPty,QString space);//输出到Debugprivate: QXmlStreamWriter m_writer; QString m_fileName; QMap<QString,QVariant> m_mapProperty; //存放数据层次属性 QMap<QString,QVariant> m_mapItems; //节点中的子节点集}; #endif // QSCRIPTJSON_H
qscriptjson.cpp:
<pre name="code" class="cpp">#include "qscriptjson.h"//要处理的数据static QString datas = QString("{'billcount':2,'bills':[\ {'billID':'010101001','billname':'billname11','billunit':'m2','decount':3,\ 'des':[{'deID':'A1-1','decont':'decont111','dename':'dename111','deunit':'100m2'},\ {'deID':'A1-3','decont':'decont111','dename':'dename111','deunit':'100m3'},\ {'deID':'A1-4','decont':'decont111','dename':'dename111','deunit':'100m3'}]},\ {'billID':'010101005','billname':'billname111','billunit':'m3','decount':1,\ 'des':[{'deID':'A1-27','decont':'decont111','dename':'dename111','deunit':'100m3'}]}]}");QScriptJson::QScriptJson(const QString &fileName){ m_fileName=fileName; QStringList sls; m_mapProperty.insert("_BEGIN_","BillTable"); sls<<"billcount"<<"bills"; m_mapProperty.insert("BillTable",sls); sls.clear(); sls<<"billID"<<"billname"<<"billunit"<<"decount"<<"des"; m_mapProperty.insert("bills",sls); sls.clear(); sls<<"deID"<<"decont"<<"dename"<<"deunit"; m_mapProperty.insert("des",sls); sls.clear(); m_mapProperty.insert("_END_","_END_"); m_mapItems.insert("bills","BillItem"); m_mapItems.insert("des","DesItem");}QScriptJson::~QScriptJson(){}bool QScriptJson::write2File(){ QString dt=datas; QFile file(m_fileName); if (!file.open(QFile::WriteOnly | QFile::Text)) { dbgtx<<QString("can not open file : %1").arg (m_fileName); return false; } try{ m_writer.setDevice(&file); m_writer.setAutoFormatting(true); //文档开始 m_writer.writeStartDocument(); QScriptEngine engine; QScriptValue sv = engine.evaluate("value="+dt); QString strBegin=m_mapProperty.value("_BEGIN_").toString(); m_writer.writeStartElement(strBegin); QStringList sLsPty=m_mapProperty.value(strBegin).toStringList(); getPropety(sv,sLsPty," "); getPropety(sv,sLsPty); m_writer.writeEndElement(); m_writer.writeEndDocument(); }catch(...){ dbgtx<<"Error: Write to File ."; file.close(); } file.close();}//"{\"_data\":{\"value\":0.4907147960205781}}";void QScriptJson::selfTestFunc(QString str){ QString dt=str; QScriptEngine engine; QScriptValue sv = engine.evaluate("value="+dt); QScriptValueIterator itsv(sv); while (itsv.hasNext()) { itsv.next(); if(itsv.flags()&&QScriptValue::SkipInEnumeration)continue; QScriptValue spV=itsv.value(); qDebug()<<"itsv"<<itsv.name()<<itsv.scriptName().toString()<<spV.toString(); } qDebug()<<"sv"<<sv.toString(); bool bisNull = sv.isNull(); QScriptValue sptdataV=sv.property("_data"); qDebug()<<"sptdataV"<<sptdataV.toString(); bool bb = sptdataV.isArray(); //if(!sptdataV.isArray()) { QScriptValueIterator it(sptdataV); while (it.hasNext()) { it.next(); if(it.flags()&&QScriptValue::SkipInEnumeration)continue; QScriptValue spV=it.value(); qDebug()<<"sptdataV"<<it.name()<<it.scriptName().toString()<<spV.toString(); } }}void QScriptJson::getPropety(QScriptValue sv,QStringList sLsPty){ foreach(QString element,sLsPty){ QScriptValue sptV=sv.property(element); if(!sptV.isArray()){ QString value=sptV.toString(); m_writer.writeAttribute(element,value); }else{ m_writer.writeStartElement(element); QScriptValueIterator it(sptV); while (it.hasNext()) { it.next(); if(it.flags()&&QScriptValue::SkipInEnumeration)continue; QString item=m_mapItems.value(element).toString(); m_writer.writeStartElement(item); QStringList sLs_Child=m_mapProperty.value(element).toStringList(); getPropety(it.value(),sLs_Child); m_writer.writeEndElement(); } m_writer.writeEndElement(); } }}void QScriptJson::getPropety(QScriptValue sv, QStringList sLsPty,QString space){ foreach(QString str,sLsPty){ QScriptValue sptV=sv.property(str); if(!sptV.isArray()){ QString str2=sptV.toString(); dbgtx<<(space+str+QString(" : ")+str2); //如果当前属性不是一个数组,则输出其内容 }else{ dbgtx<<(space+str+QString(" [ ")); QScriptValueIterator it(sptV);// dbg<<it.name()<<it.value().toString();// if(it.hasNext())it.next(); while (it.hasNext()) { it.next();// dbg<<it.name()<<it.value().toString(); if(it.flags()&&QScriptValue::SkipInEnumeration) continue; QStringList sLs_Child=m_mapProperty.value(str).toStringList(); getPropety(it.value(),sLs_Child,space+" ");// it.next(); }// dbg<<it.name()<<it.value().toString(); dbgtx<<(space+str+QString(" ] ")); } }}
mainwindow.h:
<pre name="code" class="cpp">#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QTextEdit>#define dbgtx qDebug()namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QString strText,QWidget *parent = 0); ~MainWindow(); void setText(QString strText); private: QTextEdit *m_te; QString m_text;private: //Ui::MainWindow *ui;};#endif // MAINWINDOW_H
mainwindow.cpp:
<pre name="code" class="cpp">#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QString strText,QWidget *parent) : QMainWindow(parent)//, //ui(new Ui::MainWindow){ //ui->setupUi(this); /* 3\x00\x00\x00\x02result\x00\x02\x00\x00\x00""1\x00\x02message\x00\x13\x00\x00\x00\xE6\x9C\x8D\xE5\x8A\xA1\xE5\xB7\xB2\xE5\xAD\x98\xE5\x9C\xA8\xEF\xBC\x81\x00\x00{"_data":{"value":0.4907147960205781}} */ //testjson(); m_text=strText; m_te=new QTextEdit(this); m_te->setText(m_text); this->setCentralWidget(m_te);}MainWindow::~MainWindow(){ delete m_te; //delete ui;}void MainWindow::setText(QString strText){ m_text=m_text+"\n"+strText; m_te->setText(m_text);}
0 0
- QT学习之QScript
- QScript
- qt学习之qt creator
- qt学习之qt安装
- QScript 解析json
- qt学习之qtableview
- Qt学习之QString
- Qt学习之QtXml
- Qt学习之Dialog
- QT学习之路
- QT学习之路
- Qt学习之QLabel
- Qt学习之QGraphicsAnchorLayout
- Qt学习 之 文件
- Qt学习 之 数据库
- QT学习之路
- Qt之MainWindow学习
- QT 学习之路
- 西蒙iphone-OpenGL ES 教程-06 : 3D坐标里的物体
- [iOS]Size Class不同尺寸适配的是什么样的机型(实验向)
- hdu 1175 连连看dfs(记录转弯次数)
- php页面分页类通用
- EL表达式及${对象}
- QT学习之QScript
- POJ 1995 Raising Modulo Numbers(快速幂)
- 编译PC版vlc
- 用Messenger实现Activity与Service的信息交互
- MySQL详解--锁
- 西蒙iphone-OpenGL ES 教程-07 : 对物体进行独立的转换
- opencv contours 遇到边界
- 在Windows环境下学习Linux命令行的几种方法
- StringUtil