qt c++ json数据处理

在Qt C++中处理JSON数据主要依赖QJsonDocumentQJsonObjectQJsonArrayQJsonValue等核心类。以下从解析、生成、修改和文件操作四个维度详细说明,并提供可直接运行的代码示例:

1. JSON解析

// 解析JSON字符串
QString jsonStr = R"({"name":"John", "age":30, "tags":["cpp","qt"]})";
QJsonParseError err;
QJsonDocument doc = QJsonDocument::fromJson(jsonStr.toUtf8(), &err);
if(err.error != QJsonParseError::NoError) {
    qDebug() << "JSON解析错误:" << err.errorString();
    return;
}

// 获取根对象
QJsonObject root = doc.object();
QString name = root["name"].toString(); // "John"
int age = root["age"].toInt(); // 30
QJsonArray tags = root["tags"].toArray(); // ["cpp","qt"]

2. JSON生成

// 构建JSON对象
QJsonObject root;
root["name"] = "Alice";
root["age"] = 25;

QJsonArray skills;
skills.append("Qt");
skills.append("C++");
root["skills"] = skills;

// 转换为JSON文档
QJsonDocument doc(root);
QString jsonStr = doc.toJson(QJsonDocument::Indented); // 格式化输出
qDebug() << jsonStr;

输出结果:

{
    "name": "Alice",
    "age": 25,
    "skills": [
        "Qt",
        "C++"
    ]
}

3. JSON修改

// 修改现有JSON
QJsonObject obj = doc.object();
obj["age"] = 26; // 修改值
obj["newField"] = true; // 添加新字段

// 嵌套对象处理
QJsonObject address;
address["city"] = "Beijing";
obj["address"] = address;

// 转换为新JSON
QJsonDocument newDoc(obj);

4. 文件读写

// 从文件读取
QFile file("data.json");
if(!file.open(QIODevice::ReadOnly)) {
    qDebug() << "文件打开失败";
    return;
}
QJsonDocument doc = QJsonDocument::fromJson(file.readAll(), &err);
file.close();

// 写入文件
QFile outFile("output.json");
outFile.open(QIODevice::WriteOnly);
outFile.write(doc.toJson()); // 默认紧凑格式
outFile.close();

关键注意事项

  1. 类型安全:使用QJsonValuetoString()toInt()等方法时需确保类型匹配
  2. 错误处理:始终检查QJsonParseError
  3. 性能优化:处理大JSON时使用QJsonParseError::NoError避免重复解析
  4. 版本兼容:Qt 5.0+ 均支持上述API,Qt 6无重大变更

扩展场景处理

  • 自定义对象序列化:通过Q_PROPERTY宏或手动映射字段
  • 嵌套结构:使用QJsonObjectQJsonArray组合处理复杂结构
  • 流式解析:对于超大JSON文件,可使用QJsonParser(Qt 6新增)进行增量解析

完整示例代码可直接在Qt项目中编译运行,需包含#include <QJsonDocument>等头文件。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值