Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1062592
  • 博文数量: 264
  • 博客积分: 6005
  • 博客等级: 大校
  • 技术积分: 2798
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-08 20:15
文章分类

全部博文(264)

文章存档

2011年(42)

2010年(213)

2009年(4)

2008年(2)

2007年(3)

分类:

2010-10-15 21:50:33

First time i find out this it took a while. But actually there is no need any Additional code except QT itself, unless you want gain more performance then QT standard library gives. So if you want to parse JSON object first you have to include QT script engine.

 
#include 
 

Let say PHP returns something like this.

 
 json_encode(('result' => (1,2,3)));
 

So C++ code looks like:

 
    QByteArray result;
    result = QhttpClient->readAll();
 
    QScriptValue sc; 
    QScriptEngine engine;
    sc = engine.evaluate(QString(result)); // In new versions it may need to look like engine.evaluate("(" + QString(result) + ")");
 
    if (sc.property("result").isArray())
    {
 
            QStringList items;
            qScriptValueToSequence(sc.property("result"), items); 
 
            foreach (QString str, items) {
                 qDebug("value %s",str.toStdString().c_str());
             }
 
    }
 

In this example this code writes something like: value 1 value 2 value 3 values comes from generated PHP script. Let say php now gives us back something like:

 
 json_encode(('error' => false));
 

In this case just more simple syntax.

 
if (sc.property("error").toBoolean() == true)
        qDebug("Error detected");
    else
        qDebug("All ok");
 

And finally most complex example witch should be ready to use for any purpose. Let say PHP gives something like this:

 
 json_encode(
                ('result' => 
                                
                                ( 
                                    ('id' => '1' ,'date' => '487847','nick' => 'Remigiijus'), 
                                    ('id' => '1' ,'date' => '487847','nick' => 'remdex') 
                                )
                    )
);
 

In this case we must include additional file:

 
#include 
 

And let say we want to print nick names. So our C++ file will look like.

 
    QByteArray result;
    result = QhttpClient->readAll();
 
    QScriptValue sc; 
    QScriptEngine engine;
    sc = engine.evaluate(QString(result));// In new versions it may need to look like engine.evaluate("(" + QString(result) + ")");
 
    if (sc.property("result").isArray())
    {    
             QScriptValueIterator it(sc.property("result"));
             while (it.hasNext()) {
                 it.next();
                 qDebug("Nick %s",it.value().property("nick").toString().toStdString().c_str());
             }
    }
 

In this case we just use QScriptValueIterator and iterate through array. Anyway from this point everything is possible :)

阅读(1053) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~