简述
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格式作为一种轻量级传输交换格式,结构简单明了,读写也很方便,以后可以多多采用。