包含内容:
- 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 , &