文章目录
- 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 - valueQString 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();
}