Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2206096
  • 博文数量: 866
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10638
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/landuochong

文章分类

全部博文(866)

文章存档

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(70)

2011年(103)

2010年(360)

2009年(283)

2008年(22)

分类: 系统运维

2011-03-17 18:42:21

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.

 
echo json_encode(array('result' => array(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:

 
echo json_encode(array('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:

 
echo json_encode(
array('result' =>
array
(
array('id' => '1' ,'date' => '487847','nick' => 'Remigiijus'),
array('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());
}
}
 
阅读(905) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册