QT —— <QJson> 存储 & 解析

包含内容:

  • JSON 文件的存储&读取
  • 为此配置文件提供单例模式
  • 使用 hash 容器作为转化

一、QT 中的 JSON 常用类

<QJsonDocument>:

1. 作用: 用于读写 JSON 文档。

2. 函数:

  • QJsonDocument::fromJson()  从文本转化为 QJsonDocument
  • QJsonDocument::toJson()     从 QJsonDocument 转化为文本
  • !isNull()       判断已解析文档的有效性
  • isArray()     判断 JSON 文档是否包含一个数组
  • isObject()   判断 JSON 文档是否包含一个对象
  • array()    查询文档中的数组,可进行读取或修改
  • object()  查询文档中的对象,可进行读取或修改

 

<QJsonArray>:

1. 作用: 表示 JSON 数组

2. 函数:

  • append()      向数组中插入 QJsonValue
  • size()            查询数组元素个数
  • insert()         在指定索引处插入值
  • removeAt()   删除指定索引的值

3. 转化:

  • 一个 QJsonArray 可以和一个 QVariantList 相互转换

 

<QJsonObject>:

1. 作用:表示 JSON 对象,即 “key/value 对”列表,key 是独一无二的字符串,value 类型是 QJsonValue

2. 函数:

  • size()            查询 “key/value 对” 的数量
  • insert()         插入 “key/value 对”
  • remove()      删除指定的 key

3. 转化:

  • 一个 QJsonObject 可以和一个 QVariantMap 相互转换

 

<QJsonValue>:

1. 作用:表示 JSON 中的值

2. 函数:

  • isUndefined()            查询未定义的值
  • type()                        查询类型
  • isBool()                     查询类型
  • isString()                   查询类型
  • toBool()                     转化成 bool 类型
  • toString()                   转化成 string 类型
  • toDouble()                 转化成 double 类型

3. 6种基本数据类型:

  • bool    (QJsonValue::Bool)
  • double(QJsonValue::Double)
  • string  (QJsonValue::String)
  • array   (QJsonValue::Array)
  • object (QJsonValue::Object)
  • null     (QJsonValue::Null)

 

<QJsonParseError>:

1. 作用:报告 JSON 解析中的错误

2. 常用:

  • QJsonParseError::NoError     未发生错误

 

二、 1个 JSON 对象

1. json 对象存储格式:

{
    "bool value": true,
    "int value": 111,
    "str value": "name"
}

 

2. 创建 json 对象:

// 创建 JSON 对象
QJsonObject json;
json.insert("bool value", true);
json.insert("int value", 111);
json.insert("str value", "name");

// 创建 JSON 文档
QJsonDocument doc(object);
QByteArray byteArray = doc.toJson();

// 写入文件
QString strFile = "./test.json";
QFile loadFile(strFile);
if (loadFile.open(QIODevice::WriteOnly))
{
    loadFile.write(byteArray);
}      
loadFile.close();

 

3. 读取 json 对象:

//打开文件,读取 json         
QString file = "./test.json";
QFile loadFile(file);
if (loadFile.open(QIODevice::ReadOnly))
{
    QByteArray allData = loadFile.readAll();
}             
loadFile.close();

//将读出的json 进行转化
QJsonParseError jsonError;
QJsonDocument doucment = QJsonDocument::fromJson(allData , &jsonError);  // 转化为 JSON 文档
if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)){//解析未发生错误
    if (doucment.isObject()){                              // JSON 文档为对象
        QJsonObject object = doucment.object();            // 转化为对象
        if (object.contains("str value")){                 // 包含指定的 key
            QJsonValue value = object.value("str value");  // 获取指定 key 对应的 value
            if (value.isString()){                         // 判断 value 是否为字符串
                QString strValue = value.toString();       // 将 value 转化为字符串
                qDebug() << "str value: " << strValue;
            }
        }
        if (object.contains("int value")){
            QJsonValue value = object.value("int value");
            if (value.isDouble()){
                int intValue = value.toVariant().toInt();
                qDebug() << "int value : " << intValue;
            }
        }
        if (object.contains("bool value")){
            QJsonValue value = object.value("bool value");
            if (value.isBool()){
                bool boolValue = value.toBool();
                qDebug() << "bool value: " << boolValue ;
            }
        }
    }
}

 

三、 1个 JSON 数组

1. json 数组存储格式:

[
    "name",
    12.5,
    true
]

 

2. 创建 json 数组:

// 创建 JSON 数组
QJsonArray json;
json.append("name");
json.append(12.5);
json.append(true);

// 创建 JSON 文档
QJsonDocument doc(json);
QByteArray byteArray = doc.toJson();

// 写入文件
QString strFile = "./test.json";
QFile loadFile(strFile);
if (loadFile.open(QIODevice::WriteOnly))
{
    loadFile.write(byteArray);
}
        
loadFile.close();

 

3. 读取 json 数组:

//打开文件,读取 json         
QString file = "./test.json";
QFile loadFile(file);
if (loadFile.open(QIODevice::ReadOnly))
{
    QByteArray allData = loadFile.readAll();
}             
loadFile.close();

//将读出的json 进行转化
QJsonParseError jsonError;
QJsonDocument doucment = QJsonDocument::fromJson(allData , &
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值