本文转载自:http://blog.sina.com.cn/s/blog_671732440100uwxh.html
使用qtscipt库解析json数组
首先在工程文件中加
QT += script
然后头文件加
#include <QtScript>
然后解析
QString str = "{"name":"xiaotang", "age":"23", "chi":[{"a":"aa", "b":"bb"}, {"a":"aaa", "b":"bbb"}]}";
QScriptEngine engine;
QScriptValue sc = engine.evaluate("value="+str);
qDebug() << sc.property("name").toString(); //解析字段
if(sc.property("chi").isArray()) //解析数组
{
QScriptValueIterator it(sc.property("chi"));
while (it.hasNext())
{
it.next();
if(!it.value().property("a").toString().isEmpty())
qDebug() << it.value().property("a").toString();
}
}
自己在Win7环境下安装了Qt4.8.5库qt-win-opensource-4.8.5-vs2008.exe和QtCreator编辑器qt-creator-windows-opensource-2.8.0.exe,采用VS2008替代MinGW作为编译器。如果想在VS2008下部署和开发QT应用的话,再从QT官网下载一个插件qt-vs-addin-1.1.11-opensource.exe就OK了,不过VS2008对QT库的函数自动提示支持等方面没有QTCreator做得好。以上的软件都可以从QT官网Download页http://qt-project.org/downloads下载。
QT代码如下:
#include <QtGui/QApplication> #include <QtCore/QString> #include <QtCore/QStringList> #include <QtScript/QScriptEngine> #include <QtScript/QScriptValue> #include <QtScript/QScriptValueIterator> #include <QtCore/QtDebug> int main(int argc, char *argv[]) { QApplication app(argc, argv); QString strJson = "{"department":"computer science", "person number":"45", "student":[{"Name":"ccf","Math":"95", "Chinese":"84"}, {"Name":"zhangsan","Math":"75", "Chinese":"70"}]}"; QScriptEngine engine; QScriptValue sc = engine.evaluate("value=" + strJson); qDebug() << "department:" << sc.property("department").toString();//解析字段 if (sc.property("student").isArray()) //解析数组 { QScriptValueIterator it(sc.property("student")); while(it.hasNext()) { it.next(); if (!it.value().property("Name").toString().isEmpty()) { qDebug() << "Name :" << it.value().property("Name").toString(); qDebug() << "Math :" << it.value().property("Math").toString(); qDebug() << "Chinese :" << it.value().property("Chinese").toString(); } } } return app.exec(); }
运行结果如下图所示:
主要用到QtScript库的三个类:QScriptEngine、QScriptValue、QScriptValueIterator类,具体使用方法可以查看QT帮助文档。
http://blog.csdn.net/ccf19881030/article/details/12527607