1 什么是json

JSON的全称是”JavaScript Object Notation”JS 对象简谱)

意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式

是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

2 Qt 5 新增加了处理 JSON 的类

Qt 5 新增加了处理 JSON 的类,均以 QJson 开头,在 QtCore 模块中,不需要额外引入其它模块

json基础知识与Qt中的应用_Qt

3 QJsonDocument类

1.提供了读写Json文档的方式

  • JsonDocument::fromJson() ---------- 得到json文档对象
  • 转换为json对象
    object()-------------------对键值对操作
  • 转换为json数组
    array();

2.json字符串 -> json对象/json数组
3.json对象/json数组 -> json字符串

4 QJsonObject QJsonArray QJsonValue
  • 在使用json对象或json数组对象得到对应的value之后,该value值并不是最终的数据类型而是一个QJsonValue类型的属性,我们必须通过该对象判断该类型的实际类型,然后在将其转换为对应的数据类型:
  • 类型判断相关的成员方法:
bool isArray() const	是否为json数组
bool isBool() const	是否为布尔类型
bool isDouble() const	是否为浮点类型
bool isNull() const	是否为空
bool isObject() const	是否为json对象
bool isString() const	 是否为字符串类型
5 案例

json的读写

    // 创建json对象
    QJsonObject obj;

    QJsonObject sub;
    sub.insert("IP", QJsonValue("192.168.166.25"));
    sub.insert("port", "9990");

    obj.insert("server", QJsonValue(sub));

    // 内存中的json数据写入内存
    QJsonDocument doc(obj);
    // 将json对象转换为 字符串
    QByteArray data = doc.toJson();
    // 字符串写入文件
    QFile file("D:\\temp.json");
    file.open(QIODevice::WriteOnly);
    file.write(data);
    file.close();

    // 读json文件
    QFile file("D:\\temp.json");
    file.open(QIODevice::ReadOnly);
    QByteArray data = file.readAll();
    file.close();

    // 使用json文档对象加载json字符串
    QJsonDocument doc = QJsonDocument::fromJson(data);
    // 判断是数组还是对象
    if(doc.isObject())
    {
        QJsonObject obj = doc.object();
        QJsonValue value = obj.value("server");
        if(value.isObject())
        {
            QJsonObject subobj = value.toObject();
            // 取值
            QString ip = subobj.value("IP").toString();
            QString port = subobj.value("port").toString();
            qDebug() << ip << port;
        }
    }