使用Qt内置引擎解析JSON格式数据

Qt有个模块Script可以用来解析ECMAScript

QString jsonString = "{/"name/":/"//u6c49//u5b57/"}"; QScriptEngine engine; QScriptValue json = engine.evaluate("var = " + jsonString); QScriptValueIterator it(json); while (it.hasNext()) { it.next(); qDebug() << it.name() << ": " << it.value().toString(); }  

需要注意这一句:

QScriptValue json = engine.evaluate("var = " + jsonString); 

这里必须引入一个变量var来接收json字符串,这是ECMAScript的语法规定。如果觉得别扭还可以这样写:

QScriptValue json = engine.evaluate("(" + jsonString+ ")"); 

注意jsonString两边的括号是必须的,虽然老的Qt版本可以解析两边不带括号的jsonString,但这是ECMAScript语法要求的,我们应该遵守而不应该破坏它。

最后,由于evaluate会执行任意脚本,所以安全性是个问题,为了让它只执行JSON解析而不是其他恶意脚本,应该这样写:

QScriptValue json = engine.evaluate("JSON.parse").call(QScriptValue(), QScriptValueList() << jsonString); 

现在它只能解析JSON脚本,不能胡作非为了。

你可能感兴趣的:(Qt)