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();//出错时打印错误信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值