


#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QFile>
#include <QDebug>
void createJsonFile() {
// 创建一个JSON对象 键值对
QJsonObject jsonObj;
jsonObj["name"] = "John Doe";
jsonObj["age"] = 30;
jsonObj["email"] = "john.doe@example.com";
// 创建一个JSON数组
QJsonArray jsonArr;
jsonArr.append("C++");
jsonArr.append("Python");
jsonArr.append("JavaScript");
jsonArr.append(123);
// 将数组添加到JSON对象
jsonObj["languages"] = jsonArr;
// 将JSON对象转换为JSON文档
QJsonDocument jsonDoc(jsonObj);
// 将JSON文档转换为字符串(也可以是压缩格式)
QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Indented);
// 将JSON数据写入文件
QFile file("output.json");
if (!file.open(QIODevice::WriteOnly)) {
qDebug() << "Failed to open file for writing";
return;
}
file.write(jsonData);
file.close();
}
qDebug() << "JSON data saved to output.json";
int main() {
createJsonFile();
return 0;
}

#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
}
ui->setupUi(this);
QJsonObject rootObj;
rootObj["cityid"] = "1010100";
rootObj["date"]
= "2024-01-23";
rootObj["weather"] = "雨夹雪";
rootObj["tmp"]
= 3;
QJsonArray jsonArray;
jsonArray.append("data1");
jsonArray.append("data2");
jsonArray.append("data3");
jsonArray.append(100);
rootObj["testArry"] = jsonArray;
QJsonDocument jsonDoc(rootObj);
QByteArray jsonArry = jsonDoc.toJson();
QFile file("D:/QT/test.json");
file.open(QIODevice::WriteOnly);
file.write(jsonArry);
file.close();
Widget::~Widget()
{
delete ui;
}

#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QJsonObject rootObj;
rootObj["cityid"] = "1010100";
rootObj["date"]
= "2024-01-23";
rootObj["weather"] = "雨夹雪";
= 3;
rootObj["tmp"]
//Json数组
QJsonArray jsonArray;
jsonArray.append("data1");
jsonArray.append("data2");
jsonArray.append("data3");
jsonArray.append(100);
rootObj["testArry"] = jsonArray;
QJsonObject alarmObj;
alarmObj["alamType"] = "雪灾";
alarmObj["alamLeve"] = "黄色";
alarmObj["alamTitle"] = "福州市警告老陈多穿点衣服";
rootObj["alam"] = alarmObj;
QJsonObject day0;
day0["day"] = "星期一";
day0["wea"] = "晴";
day0["tem"] = 5.7;
QJsonObject day1;
day1["day"] = "星期二";
day1["wea"] = "晴";
day1["tem"] = 7;
QJsonObject day2;
day2["day"] = "星期三";
day2["wea"] = "多云";
day2["tem"] = 17;
QJsonArray dayArray;
dayArray.append(day0);
dayArray.append(day1);
dayArray.append(day2);
rootObj["days"] = dayArray;
//通过QJsonDocument把JSON数据转换成QByteArray
QJsonDocument jsonDoc(rootObj);
QByteArray jsonArry = jsonDoc.toJson();
QFile file("D:/QT/test.json");
file.open(QIODevice::WriteOnly);
file.write(jsonArry);
file.close();
}
Widget::~Widget()
{
delete ui;
}

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
void parseJson() {
// JSON字符串
/*
R 是用于定义原始字符串字面量(Raw String Literal)的标记。
在C++中,原始字符串字面量是一种方便的语法,
用于创建包含多行文本和特殊字符的字符串,而无需转义。
R"("chenlichen")"
*/
QString testStr = "chenli\"c";
QString jsonString = R"(
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com",
"skills": ["C++", "Python", "JavaScript"]
}
)";
/*jsonString = "{\n"
" \"name\": \"John Doe\",\n"
" \"age\": 30\n"
"}";
*/
// 将JSON字符串转换为QJsonDocument
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());
// 检查JSON文档是否包含一个对象
if (!jsonDoc.isNull() && jsonDoc.isObject()) {
// 获取JSON对象
QJsonObject jsonObj = jsonDoc.object();
// 访问对象的键值
QString name = jsonObj["name"].toString();
int age = jsonObj["age"].toInt();
QString email = jsonObj["email"].toString();
qDebug() << "Name:" << name;
qDebug() << "Age:" << age;
qDebug() << "Email:" << email;
}
// 处理JSON数组
if (jsonObj.contains("skills") && jsonObj["skills"].isArray()) {
QJsonArray skillsArray = jsonObj["skills"].toArray();
for (const QJsonValue &value : skillsArray) {
qDebug() << "Skill:" << value.toString();
}
}
} else {
qDebug() << "Invalid JSON...";
}
int main() {
parseJson();
return 0;
}

#include <QJsonDocument>
#include <QJsonObject>
#include <QMap>
#include <QDebug>
void parseJsonToMap() {
// JSON字符串
QString jsonString = R"(
{
"name": "John Doe",
"age": "30",
"email": "john.doe@example.com"
}
)";
// 将JSON字符串转换为QJsonDocument
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());
// 准备一个QMap来存储解析的数据
QMap<QString, QString> dataMap;
// 解析JSON对象并填充QMap
if (!jsonDoc.isNull() && jsonDoc.isObject()) {
QJsonObject jsonObj = jsonDoc.object();
for (auto key : jsonObj.keys()) {
dataMap[key] = jsonObj.value(key).toString();
}
} else {
qDebug() << "Invalid JSON...";
}
// 打印QMap内容
for (auto key : dataMap.keys()) {
qDebug() << key << ":" << dataMap[key];
}
}
int main() {
parseJsonToMap();
return 0;
}


#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>
#include <QJsonArray>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//第一步:读取JSON文件保存到QByteArray中
QFile file("D:/QT/test.json");
file.open(QIODevice::ReadOnly);
QByteArray rawData = file.readAll();
file.close();
//第二步:把QByteArray转成JSONDoc
QJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);
if( !jsonDoc.isNull() && jsonDoc.isObject()){
//第三步:把JsonDoc转成JsonObj
QJsonObject jsonRoot = jsonDoc.object();
//第四步:如果解析普通键值对,通过“下表键”来获取值
QString strW
= jsonRoot["weather"].toString();
QString strCityId = jsonRoot["cityid"].toString();
int tempretrue = jsonRoot["tmp"].toInt();
qDebug() << strW;
qDebug() << strCityId;
qDebug() << QString::number(tempretrue);
//第五步:判读是否是一个数组
if(jsonRoot.contains("testArry") && jsonRoot["testArry"].isArray()){
qDebug() << "array";
//如果是数组,转换成JSON数组
QJsonArray testArray = jsonRoot["testArry"].toArray();
//遍历数组,访问每一项
for(QJsonValue val : testArray){
//QJsonValue的type函数返回数据类型,根据不同的数据类型处理数据
// QJsonValue::Type t = val.type();
switch (val.type()) {
case QJsonValue::Double:
qDebug() << QString::number(val.toDouble());
break;
case QJsonValue::String:
qDebug() << val.toString();
break;
case QJsonValue::Object:
break;
}
}
}
//第六步:判断某个键对应的值,是否是一个json对象
if(jsonRoot.contains("alam") && jsonRoot["alam"].isObject()){
//转成Json对象后处理
QJsonObject alamObj = jsonRoot["alam"].toObject();
qDebug() << alamObj["alamLeve"].toString();
qDebug() << alamObj["alamTitle"].toString();
qDebug() << alamObj["alamType"].toString();
}
if(jsonRoot.contains("days") && jsonRoot["days"].isArray()){
QJsonArray dayArray = jsonRoot["days"].toArray();
for(QJsonValue val : dayArray){
//if(val.type() ==QJsonValue::Object ){
if(val.isObject()){
QJsonObject obj = val.toObject();
qDebug() << obj["day"].toString();
qDebug() << QString::number(obj["tem"].toDouble());
qDebug() << obj["wea"].toString();
}
}
}
}
}
Widget::~Widget()
{
delete ui;
}
