QT-JSON

发布于:2025-06-02 ⋅ 阅读:(19) ⋅ 点赞:(0)

#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;
 }


网站公告

今日签到

点亮在社区的每一天
去签到