文章目录
- 1. JSON 有什么作用?
- 2. JSON 的特点
- 3. JSON 的两种数据格式
- 3.1 JSON 数组
- 3.2 JSON 对象
- 4. Qt 中如何使用 JSON 呢?
- 4.1 QJsonObject
- 4.2 QJsonArray
- 4.3 QJsonValue
- 4.4 QJsonDocument
- 5. 构建 JSON 字符串
- 6. 解析 JSON 字符串
1. JSON 有什么作用?
-
🐧①
JSON
即为JS
对象表示法(因为它和JS
中对象的写法很相似),与JavaScript
是没啥关系的; -
🐧②
JSON
本质是一种特殊格式的字符串; -
🐧③
JSON
是一种轻量级的数据交互格式,客户端和服务端数据交互,基本都是JSON
格式;
2. JSON 的特点
-
① 便于阅读和书写
除JSON
外,还有一种数据交互的格式XML
,但是JSON
更便于书写和阅读 -
② 独立于编程语言,几乎所有的编程语言和开发环境中,都有生成和解析
JSON
字符串的库
-
③ 网络传输的标准数据格式
3. JSON 的两种数据格式
JSON
有两种数据格式:
⚽JSON
对象,被{ }
包裹
⚽JSON
数组,被[]
包裹
3.1 JSON 数组
JSON
数组中可以放置任意的类型,可以在数组中放置JSON
对象,JSON
数组
3.2 JSON 对象
- 🍎
JSON
对象是键值对的形式,键的类型是字符串,值的类型可以为数组,对象,整形,浮点型;
4. Qt 中如何使用 JSON 呢?
4.1 QJsonObject
4.2 QJsonArray
4.3 QJsonValue
4.4 QJsonDocument
5. 构建 JSON 字符串
#include <QCoreApplication> #include <QJsonArray> #include <QJsonDocument> #include <QJsonObject> #include <QDebug> #include <QFile> void writeJson() { QJsonObject rootQJsonObject; // 插入 name 字段 rootQJsonObject.insert("name", "China"); // 插入 info 字段 QJsonObject infoQJsonObject; infoQJsonObject.insert("capital", "beijing"); infoQJsonObject.insert("asian", true); infoQJsonObject.insert("founded", "1949"); rootQJsonObject.insert("info", infoQJsonObject); // 插入 provinces 字段 QJsonArray provincesArray; QJsonObject sdProvincesQJsonObject; sdProvincesQJsonObject.insert("name", "shangdong"); sdProvincesQJsonObject.insert("capital", "jinan"); QJsonObject zjProvincesQJsonObject; zjProvincesQJsonObject.insert("name", "zhejiang"); zjProvincesQJsonObject.insert("capital", "hangzhou"); provincesArray.append(sdProvincesQJsonObject); provincesArray.append(zjProvincesQJsonObject); rootQJsonObject.insert("provinces", provincesArray); // 把 json 对象转换成为 字符串 QJsonDocument doc(rootQJsonObject); QByteArray json = doc.toJson(); // 打印输出 qDebug() << QString(json).toUtf8().data(); // 将 json 字符串写入到文件 QFile file("d:\\china.json"); file.open(QFile::WriteOnly); file.write(json); file.close(); } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); writeJson(); return a.exec(); }
复制
6. 解析 JSON 字符串
#include <QCoreApplication> #include <QFile> #include <QJsonArray> #include <QJsonDocument> #include <QJsonObject> #include <QDebug> void readJson() { // 1. 读取文件 QFile file("d:\\china.json"); file.open(QFile::ReadOnly); QByteArray json = file.readAll(); file.close(); QJsonDocument doc = QJsonDocument::fromJson(json); if (!doc.isObject()) { qDebug() << " Not an object"; return; } QJsonObject obj = doc.object(); QStringList keys = obj.keys(); for (int i = 0; i < keys.size(); i ++) { // 获取 key - value QString key = keys[i]; QJsonValue value = obj.value(key); if (value.isBool()){ qDebug() << "key : " << key << " value : " << value.toBool(); } else if (value.isDouble()) { qDebug() << "key : " << key << " value : " << value.toDouble(); } else if (value.isString()) { qDebug() << "key : " << key << " value : " << value.toString(); } else if (value.isObject()) { qDebug() << key << ":"; QJsonObject infoObject = value.toObject(); QString capital = infoObject["capital"].toString(); bool asian = infoObject["asian"].toBool(); QString founded = infoObject["founded"].toString(); qDebug() << "capital : " << capital; qDebug() << "asian : " << asian; qDebug() << "founded" << founded; } else if (value.isArray()){ QJsonArray provincesArray = value.toArray(); for (int i = 0; i < provincesArray.size(); i ++) { QJsonObject sdJsonObject = provincesArray[i].toObject(); qDebug() <<"name: " << sdJsonObject["name"].toString(); qDebug() <<"capital: " << sdJsonObject["capital"].toString(); } } } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); readJson(); return a.exec(); }
复制