从上面JSON的分析,就可以大概知道怎么在QT去解析一个JSON字符串了。
-
QJsonObject
这里就是JSON的对象,由键值对组成,也就是QString和QJsonValue组成
-
QJsonArray
这里是JSON的数组,由一系列的JSON的值(QJsonValue)组成
-
QJsonValue
JSON的值。可以是bool、数字、字符串、数组、对象
-
QJsonDocument
JSON文档。
想要解析JSON你首先得把一系列的JSON字符串转换成实例化的QJsonDocument对象,然后才能调用QJsonObject或者QJsonArray进行解析。
例子解析分析:
QJsonDocument m_document;
QFile jsonFile("testJson.json");
file.open(QIODevice::ReadOnly);
QByteArray jsonBa = file.readAll();
QJsonParseError error;
m_document = QJsonDocument::fromJson(jsonBa, &error);
jsonFile.close();
-
解析基本的数组
["ZhangSan","Lisi","WangWu"]
解析步骤为:
- 获取对应的QJsonArray数组
- 用下标访问的方法,意义获取数组里的值QJsonValue
- 输出值的内容
代码实现如下:
QJsonArray array;
if (m_document.isArray()) {
array = m_document.array();
for (int i = 0; i < array.size(); i++) {
QJsonValue value = array.at(i);
qDebug() << value.toString();
-
解析基本的对象
{
"name":"Zhangsan",
"id":"1"
解析步骤为:
- 获取对应的QJsonObject对象
- 获取对象里的所有键(QString)
- 逐一输出键对应的值(QJsonValue)
代码实现如下:
QJsonObject object;
if (m_document.isObject()) {
object = m_document.object();
foreach (QString key, object.keys()) {
qDebug() << object.value(key).toString();
-
解析JSON数组组合JSON对象
[
"name":"Zhangsan",
"id":"1"
}, {"name":"Lisi",
"id":"2"
}, {
"name":"Wangwu",
"id":"2"
解析步骤为:
- 获取对应的QJsonArray数组
- 用下标访问的方式来获取值(QJsonValue)
- 如果其中一个值是对象(QJsonObject),就获取这个对象,然后按照对象的解析方法来解析。
代码实现如下:
QJsonArray array;
if (m_document.isArray()) {
array = m_document.array();
for (int i = 0; i < array.size(); i++) {
if (array.at(i).isObject()) {
QJsonObject object = array.at(i).toObject();
if (object.contains("name")) {
qDebug() << object.value("name").toString();
-
解析JSON对象组合JSON数组
{
"type":"1",
"member":["Zhangsan", "Lisi", "Wangwu"]
解析步骤为:
- 获取对应的JSON对象(QJsonObject)
- 获取指定键对应的值(QJsonValue)
- 如果这个值是一个数组(QJsonArray),按照数组的解析方式来解析
代码实现如下:
QJsonObject object;
if (m_document.isObject()) {
object = m_document.object();
if (object.contains("member")) {
QJsonArray array = object.value("member").toArray();
qDebug() << array[0].toString();
qDebug() << array[1].toString();
qDebug() << array[2].toString();