Json语法
1.数据格式为"key:value",名称与值以分号分隔 2.数据间逗号分隔 3.大括号 {} 保存对象 4.中括号 [] 保存数组,数组可以包含多个对象
例子如下:
{
"Name": "Alen",
"Birthday": 1998,
"Family": {
"Father": "Harley",
"Mother": "Hermione",
},
"Hobby": [
"Magic",
"Book",
"Movie"
]
}
生成与解析Json
理解了上述规则,生成就很容易,常用的Qt类为QJsonDocument、QJsonObject、QJsonArray。以上述为例,整体时一个QJsonObject,"Family"又是一个子QJsonObject,"Hobby"为QJsonArray。而QJsonDocument 类用于读和写 JSON 文档,使用 QJsonDocument::fromJson() 从基于文本的表示转化为 QJsonDocument, toJson() 则可以反向转化为文本。
生成Json
QJsonObject familyObj;
familyObj.insert("Father", "Harley ");
familyObj.insert("Mother", "Hermione");
QJsonArray hobbyArray;
hobbyArray.append("Magic");
hobbyArray.append("Book");
hobbyArray.append("Movie");
QJsonObject mainObj;
mainObj.insert("Name", "Alen");
mainObj.insert("Birthday", 1998);
mainObj.insert("Family", familyObj);
mainObj.insert("Hobby", hobbyArray);
QByteArray bytes = QJsonDocument(mainObj).toJson();
效果如图:
解析Json
QJsonDocument doc = QJsonDocument::fromJson(bytes);
QString tmpName, fatherName, motherName;
QVariantList hobby;
int birthday;
QJsonObject jsonObj = doc.object();
tmpName = jsonObj.value("Name").toString();
birthday = jsonObj.value("Birthday").toInt();
QJsonObject subObj = jsonObj.value("Family").toObject();
fatherName = subObj.value("Father").toString();
motherName = subObj.value("Mother").toString();
QJsonArray subArray = jsonObj.value("Hobby").toArray();
hobby = subArray.toVariantList();
效果如图:
|