Qjson的几种常见解析格式

第一种:简单对象的值

这是最简单的获取对象内的值,通过键查找到对应的值以后在进行转换字符串

{
  "name": "1",
  "id": " connect"
}

解析代码:

QJsonParseError err_rpt;//用于判断是否出错
QJsonDocument  root_Doc = QJsonDocument::fromJson(data, &err_rpt);//字符串格式化为JSON
if(root_Doc.isObject())
{
    //根据键打印对应的值
    qDebug()<<root_Doc.object().value("name").toString();
    qDebug()<<root_Doc.object().value("id").toString();

}
else
    qDebug()<<err_rpt.errorString();//出错时打印错误信息



第二种:数组内包含多种类型值

这种主要就是需要根据数组内不同的数据类型来转换;如下面的json数组中是包含了一个字符串和一个整数以及一个bool类型的数据

[
  "name",
  21,
  true
]

解析代码:

QJsonParseError err_rpt;//用于判断是否出错
QJsonDocument  root_Doc = QJsonDocument::fromJson(data, &err_rpt);//字符串格式化为JSON
if(root_Doc.isArray())
{
    QJsonArray array = root_Doc.array();
    for (int i=0; i<array.size();i++ ) {
        if(array.at(i).type()==QJsonValue::String)
        {
           qDebug()<<array.at(i).toString();

        }
        if(array.at(i).type()==QJsonValue::Double)
        {
           qDebug()<<array.at(i).toDouble();

        }
        if(array.at(i).type()==QJsonValue::Bool)
        {
           qDebug()<<array.at(i).toBool();

        }
    }


 }
 else
     qDebug()<<err_rpt.errorString();//出错时打印错误信息


第三种:数组内包含键值对与多个对象

数组内包含键值对与多个json对象的,并且对象内包含其他json对象;这种需要先获取到数组的大小进行遍历

[
  {
    "name": "zhangsan",
    "info": {
      "age": "18",
      "sex": "man"
    }
  },
  {
    "name": "lisi",
    "info": {
      "age": "21",
      "sex": "woman"
    }
  }
]

解析代码:

 QJsonParseError err_rpt;//用于判断是否出错
 QJsonDocument  root_Doc = QJsonDocument::fromJson(data, &err_rpt);//字符串格式化为JSON
 if(root_Doc.isArray())
 {
      QJsonArray array = root_Doc.array();  // 转数组

      int nSize = array.size(); //获取json数组大小
      for (int i = 0; i < nSize; ++i)//循环遍历json数组内的所有键值对
      {
      		//打印数组内对象的第一个键为“name”的值
      		qDebug() << array.at(i).toObject().value("name").toString();
       	 	//遍历info对象内的值,查找对应的键获取值进行输出
     		 QJsonObject jsonObject = array.at(i).toObject().value("info").toObject();
             qDebug() << "age : " << jsonObject.value("age").toString();
             qDebug() << "sex : " << jsonObject.value("sex").toString();
             qDebug()<<"***********************************";
      }

 }
 else
    qDebug()<<err_rpt.errorString();//出错时打印错误信息


第四种:对象中包含数组

这种与上面的差不多,不过这种是在对象中包含数组的;需要先转为object对象再对数组进行操作

{
  "name": "lisi",
  "age": 18,
  "grade": [
    {
      "name": "English",
      "score": 80
    },
    {
      "name": "Math",
      "score": 90
    },
    {
      "name": "Chinese",
      "score": 100
    }
  ]
}

解析代码:

QJsonParseError err_rpt;//用于判断是否出错
QJsonDocument  root_Doc = QJsonDocument::fromJson(data, &err_rpt);//字符串格式化为JSON
if(root_Doc.isObject())
{
    qDebug()<<root_Doc.object().value("name").toString();
    qDebug()<<root_Doc.object().value("age").toInt();
    QJsonArray array = root_Doc.object().value("grade").toArray();
    for(int i=0;i<array.size();i++)
    {
        qDebug()<< array.at(i).toObject().value("name").toString();

        qDebug()<< array.at(i).toObject().value("score").toInt();
    }

}
else
    qDebug()<<err_rpt.errorString();//出错时打印错误信息
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 QJson 库可以解析 JSON 文件。以下是解析 JSON 文件的基本步骤: 1. 包含 QJson 库头文件: ```cpp #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> ``` 2. 从文件中读取 JSON 数据: ```cpp QFile file("data.json"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QByteArray jsonData = file.readAll(); file.close(); ``` 3. 将 JSON 数据解析成 QJsonDocument 对象: ```cpp QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData); ``` 4. 从 QJsonDocument 对象中获取 QJsonObject 或 QJsonArray: ```cpp if (jsonDoc.isObject()) { QJsonObject jsonObj = jsonDoc.object(); // 处理 QJsonObject 对象 } else if (jsonDoc.isArray()) { QJsonArray jsonArray = jsonDoc.array(); // 处理 QJsonArray 对象 } ``` 5. 从 QJsonObject 或 QJsonArray 中获取具体的 JSON 数据: ```cpp // 从 QJsonObject 中获取字符串数据 QString name = jsonObj["name"].toString(); // 从 QJsonArray 中获取整数数据 int age = jsonArray[0].toInt(); ``` 完整的代码示例: ```cpp #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QFile> void parseJsonFile(const QString &fileName) { QFile file(fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QByteArray jsonData = file.readAll(); file.close(); QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData); if (jsonDoc.isObject()) { QJsonObject jsonObj = jsonDoc.object(); QString name = jsonObj["name"].toString(); int age = jsonObj["age"].toInt(); qDebug() << "Name: " << name << ", Age: " << age; } else if (jsonDoc.isArray()) { QJsonArray jsonArray = jsonDoc.array(); foreach (const QJsonValue & value, jsonArray) { int age = value.toInt(); qDebug() << "Age: " << age; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值