分类: 嵌入式
2013-07-24 17:39:29
Qt支持Javascript脚本的解析,而Json就是JavaScript 对象表示法,Json 文本格式在语法上与创建 JavaScript 对象的代码相同。所以在Qt中可以通过脚本解析的方式来解析JSon格式的数据。有关JSon格式的说明,请。
由于在Qt是通过脚本解析的方式来解析Json数据的,所以需要在.pro工程文件中添加下面语句:
QT += script
简单的格式的Json数据没有嵌套数组,形式譬如下面的这样:
{ "firstName":"John" , "lastName":"Doe" }
可以通过类似与下面的代码解析:
1
2
3
4
5
6
7
8
9
10
|
QString jsonData = "{\"firstName\":\"John\" , \"lastName\":\"Doe\" }";
QScriptValue value;
QScriptEngine engine;
value = engine.evaluate("value = " + QString(jsonData));
QScriptValueIterator it(value);
while (it.hasNext())
{
it.next();
qDebug() << it.name() << ": " << it.value().toString();
}
|
有的Json带有嵌套数组,形式如下:
{ "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }
QScriptValue类中带有property方法,接受的参数是Json数据中的键,返回相应的值,所以类似于上面的JSon数组,可以通过下面的代码解析。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
QString json = "{employees:[{ \"firstName\":\"John\" ,
\"lastName\":\"Doe\" },
{\"firstName\":\"Anna\" ,
\"lastName\":\"Smith\"}]}";
QScriptValue value;
QScriptEngine engine;
value = engine.evaluate("jsonvalue = " + json);
if (value.property("employees").isArray())
{
QScriptValueIterator it(value.property("employees"));
while (it.hasNext())
{
it.next();
qDebug() << it.value().property("firstName").toString();
qDebug() << it.value().property("lastName").toString();
}
}
|