Qt_QJson等的简单应用

JSON的基本概念

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。
JSON 语法是 JavaScript 对象表示语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 方括号保存数组
  • 花括号保存对象
    JSON 数据的书写格式是:名称/值对。
    名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
"firstName":"John"

JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null

Qt中对JSON的支持

Qt5比Qt4新的地方之一就是提供了对JSON的支持,主要的类有:

类名 简介
QJsonArray 是一个JSON的数组
QJsonDocument 用于读写JSON文档的类
QJsonObject 封装了JSON对象
QJsonParseError 用于查看在解析JSON时发生的错误
QJsonValue 封装了一个JSON的值

简单的例子

就用今天刚写出来的翻译机中的例子
度娘的翻译api成功输出JSON格式,例如

{
    “from”:”zh”,
    “to”:”en”,
    “trans_result”:[]
}

reply->readAll()返回的是QByteArray,于是就用QJsonDocument的静态函数QJsonDocument QJsonDocument::fromJson(const QByteArray & json, QJsonParseError * error = 0)将一个JSON文档转化为QJsonDocument。

QJsonDocument jsonResponse=QJsonDocument::fromJson(reply->readAll());

然后根据度娘的例子将其中的JSON对象提取出来
QJsonObject QJsonDocument::object() const
该函数是返回一个包含在文档中的QJsonObject对象,如果返回空对象则说明文档中包含了一个数组

QJsonObject jsonObject = jsonResponse.object();

度娘的请求中翻译的结果放在了一个JSON的数组中,那就用QJsonArray来储存
QJsonValue QJsonObject::value(const QString & key) const
该函数返回了该“key”值代表的值,是一个QJsonValue对象,如果该键不存在值那么就返回QJsonValue::Undefined
QJsonArray QJsonValue::toArray(const QJsonArray & defaultValue) const
该函数将值转换成数组并返回

QJsonArray array=jsonObject.value("trans_result").toArray();

最后遍历这个数组,QJsonArray的值都是QJsonValue类型的,所以先用QJsonValue储存再将其转换成QJsonObject,然后取出翻译的结果(度娘把结果放到了dst对应的值中)

for(int i=0;i<array.size();i++)
    {
        QJsonValue value=array[i];
        QJsonObject obj=value.toObject();
        ui->Show->setText(obj.value("dst").toString());
    }

你可能感兴趣的:(JavaScript,qt)