Qt 数据转换json
时间: 2025-01-30 11:07:37 浏览: 38
### Qt 中实现数据和 JSON 的相互转换
#### 解析 JSON 数据并转换为 C++ 数据结构
当接收到 JSON 格式的字符串时,可以利用 `QJsonDocument` 类将其解析成相应的 C++ 数据结构。对于有效的 JSON 字符串,先尝试构建一个 `QJsonDocument` 对象,再根据文档根节点是对象还是数组分别获取对应的 `QJsonObject` 或者 `QJsonArray`。
```cpp
QString jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());
if (!jsonDoc.isNull()) {
if (jsonDoc.isObject()) { // 判断是否为对象形式的JSON
QJsonObject jsonObj = jsonDoc.object();
QString name = jsonObj["name"].toString(); // 获取"name"字段值
int age = jsonObj["age"].toInt(); // 获取"age"字段值
qDebug() << "Name:" << name;
qDebug() << "Age:" << age;
}
}
```
此段代码展示了如何将 JSON 文本转化为内部表示,并从中提取特定键所关联的数据[^1]。
#### 将 C++ 数据结构转换为 JSON 数据
反之亦然,在拥有本地变量的情况下也可以很方便地构造出 JSON 表达式:
```cpp
// 创建一个新的QJsonObject实例并向其中添加成员
QJsonObject person;
person.insert("name", "Alice");
person.insert("age", 25);
person.insert("city", "Los Angeles");
// 使用QJsonDocument封装这个对象以便后续序列化
QJsonDocument doc(person);
// 序列化为紧凑格式(无缩进)或带缩进的人类可读格式
qDebug().noquote() << doc.toJson(QJsonDocument::Indented);
```
上述例子说明了怎样把一组属性组合起来形成完整的 JSON 结构体[^2]。
另外值得注意的是,如果要处理更复杂的情况比如列表,则可以通过 `QJsonArray` 来完成相应工作;而对于图像等二进制资源则可能涉及到额外编码解码过程[^3]。
阅读全文
相关推荐


















