JSON是一种轻量级的数据交换格式,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,但是最近有人发现qt解析不了json,这是怎么回事?下面我们讲解一下。
如果解析不了的话,肯定是没有正确解析,大家可以参考解析的主要步骤如下:
1、将来源数据转化为JsonDocument。可用它的构造函数,或setArray、setObject,或它的静态成员函数。
2、可用下列四函数判断它的最外层数据类型(一般是个对象):
bool isArray() const
bool isEmpty() const
bool isNull() const
bool isObject() const
3、知道类型后,用以下函数将它转化为json对象或json数组或Map
QJsonArray array() const
QJsonObject object() const
QVariant toVariant() const
一般方法
// 创建 QJsonParseError 对象,用来获取解析结果 QJsonParseError error; // 使用静态函数获取 QJsonDocument 对象 QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toUtf8(), & error); // 根据解析结果进行处理 if (error.error == QJsonParseError::NoError) { if (!(jsonDocument.isNull() || jsonDocument.isEmpty())) { if (jsonDocument.isObject()) { // ... } else if (jsonDocument.isArray()) { // ... } } } else { // 检查错误类型 }
以下是qt解析json实例:
json文件内容如下:
{ "result": [ [ "笔记本电脑包", "174006.44952143155" ], ["笔记本电脑支架", "10922.010325770798" ], [ "笔记本电脑游戏本", "5234.557238132601" ], [ "笔记本电脑 轻薄便携 学生", "63230.4791839193" ], [ "笔记本电脑包14寸", "60253.89348659004" ], [ "笔记本电脑包 15.6英寸", "12103.593989071038" ], [ "笔记本电脑苹果", "114121.56232963233" ], [ "笔记本电脑女生款超薄", "5894.598044196088" ], [ "笔记本电脑超薄", "15421.232512795516" ], [ "笔记本电脑支架托架", "14211.73642800944" ] ] , "tmall": "笔记本电脑" }
解析代码如下:
// 解析json文件 QFile file(":/data.json"); file.open(QIODevice::ReadOnly | QIODevice::Text); QString jsonValue = file.readAll(); file.close(); // 解析JSON字符串 QJsonParseError parseJsonErr; QJsonDocument document = QJsonDocument::fromJson(jsonValue.toUtf8(), & parseJsonErr); if (!(parseJsonErr.error == QJsonParseError::NoError)) { qDebug() << tr("解析json文件错误!"); < p = "" > return; } QJsonObject jsonObject = document.object(); if (jsonObject.contains(QStringLiteral("result"))) { QJsonValue resultValueList = jsonObject.value(QStringLiteral("result")); if (resultValueList.isArray()) { QJsonArray array = resultValueList.toArray(); for (int i = 0; i < array.size(); i++) { QJsonValue sonArray = array.at(i); if (sonArray.isArray()) { QJsonArray grandsonArry = array.at(i) .toArray(); for (int j = 0; j < grandsonArry.size(); j++) { QString str = grandsonArry.at(j) .toString(); qDebug() << str; } } } } }
qDebug() << "tmall =" << jsonObject["tmall"].toString();
其实qt解析json文件也没有什么难度,如果实在不会的话,大家可以将例子记下,也可以自己在平时的时候多研究几遍就可以了,最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。
推荐阅读: