Qt下实现JSON格式的转换

简述

JSON格式一种轻量级的数据交换格式,跨平台,兼容性高,具有良好的可读性和快速编写的特性。
下面来实现JSON与一般数据的相互转换。主要使用Json对象类QJsonObject和Json数组类QJsonArray生成节点,使用QJsonDocument生成最终json格式数据。

代码之路

json格式如下:

示例:
{
 "num": "300",
 "type": 1,
 "time": "2018-06-24 00:01",
 "data": [
     {
         "height": 40,
         "Min": 1,
         "Max": 1,
     },
     {
         "height": 50,
         "Min": 1,
         "Max": 1,
     }... //12组
 ]
}

写成JSON格式

QByteArray SecHttp::turnToJson(MeasureInfo info)
{
  //构建Json对象
  QJsonObject subjson[12];
  for (int i = 0; i < 12; ++i)
  {
    subjson[i].insert("height", info.Data[i].Height);
    subjson[i].insert("Min", info.Data[i].Min);
    subjson[i].insert("Max", info.Data[i].Max);    
  }
  //构建Json数组
  QJsonArray jsonArray;
  for (int i = 0; i < 12; ++i)
  {
    jsonArray.append(QJsonValue(subjson[i]));
  }
  //构建复杂Json对象
  QJsonObject json;
  json.insert("num", info.Num);
  json.insert("type", info.Type);
  json.insert("time", info.Time);
  json.insert("data", QJsonValue(jsonArray));
  //构建Json文档
  QJsonDocument document;
  document.setObject(json);
  QByteArray secArray = document.toJson(QJsonDocument::Compact);
  //qDebug() << "JSON!!" << QString(secArray);
  return secArray;
}

读取JSON格式

//读取格式 {"code": 1, "msg": "msginfo"}
QByteArray byteArray = reply->readAll(); //待读取的数据
QJsonParseError jsonError;
QJsonDocument document = QJsonDocument::fromJson(byteArray, &jsonError); //传化为Json文档
if (!document.isNull() && (jsonError.error == QJsonParseError::NoError))
{
  if (document.isObject())
  {
    QJsonObject object = document.object(); //文档转化为Json对象
    if (object.contains("code"))
    {
      QJsonValue value = object.value("code");
      if (value.isDouble())
      {
        tmpcode = value.toInt();
      }
    }
    if (object.contains("msg"))
    {
      QJsonValue value = object.value("msg");
      if (value.isString())
      {
        tmpmsg = value.toString();
      }
    }
  }
}

小结

Json格式作为一种轻量级传输交换格式,结构简单明了,读写也很方便,以后可以多多采用。

猜你喜欢

转载自blog.csdn.net/lusanshui/article/details/84570083