前言
上两篇文章介绍了
使用cJSON库解析和构建JSON字符串
和
Qt平台下使用QJson解析JSON字符串
本篇文章介绍,Qt开发环境下使用QJson库构建JSON字符串,开发平台基于Qt 5.8 Windows。
JSON的构建包括:
-
简单的键值对
-
JSON对象作为键的值
-
JSON数组
-
JSON数组的嵌套
QJson构建JSON字符串示例
关于JSON字符串的介绍,可以参考
JSON简介
。
首先,解析和构建都要包含如下头文件:
#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>
1.构建一个简单的键值对JSON
void Create_Simple_JSON(void){
//创建JSON对象 QJsonObject root_Obj; //添加键值对,值的类型自动识别,顺序不可自定义 root_Obj.insert("CSDN", "https://blog.csdn.net/whik1194"); root_Obj.insert("cnblogs", "https://home.cnblogs.com/u/whik/"); root_Obj.insert("Github", "https://github.com/whik/"); root_Obj.insert("Blog", "https://www.wangchaochao.top/"); root_Obj.insert("status", 1); root_Obj.insert("enable", true); root_Obj.insert("update_time", "20190723");
//创建Json文档 QJsonDocument root_Doc; root_Doc.setObject(root_Obj); QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式// QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式 QString strJson(root_str); QString strJson(root_str); qDebug() << strJson;}
输出结果
{ "Blog": "https://www.wangchaochao.top/", "CSDN": "https://blog.csdn.net/whik1194", "Github": "https://github.com/whik/", "cnblogs": "https://home.cnblogs.com/u/whik/", "enable": true, "status": 1, "update_time": "20190723"}
2.构建北京时间JSON字符串
void Create_BJTime_JSON(void){ QJsonObject result_Obj; result_Obj.insert("timestamp", "ok"); result_Obj.insert("datetime_1", "2019-07-21 10:46:57"); result_Obj.insert("datetime_2", "2019年07月21日 10时46分57秒"); result_Obj.insert("week_1", "0"); result_Obj.insert("week_2", "星期日"); result_Obj.insert("week_3", "周日"); result_Obj.insert("week_4", "Sunday");
QJsonObject root_Obj; //添加键值对,值的类型自动识别,顺序不可自定义 root_Obj.insert("status", "success"); root_Obj.insert("Blog", "www.wangchaochao.top"); root_Obj.insert("result", result_Obj);
//创建Json文档 QJsonDocument root_Doc; root_Doc.setObject(root_Obj); QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式// QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式// qDebug() << root_str; //中文输出乱码 QString strJson(root_str); qDebug() << strJson;}
输出结果
{ "status": "success", "result": { "timestamp": "ok", "datetime_1": "2019-07-21 10:46:57", "datetime_2": "2019年07月21日 10时46分57秒", "week_1": "0", "week_2": "星期日", "week_3": "周日", "week_4": "Sunday" }, "Blog": "www.wangchaochao.top"}
3.构建字符串数组
void Create_Array_Str_JSON(void){ QJsonArray root_Arr;
root_Arr.insert(0, "Sunday"); root_Arr.insert(1, "Monday"); root_Arr.insert(2, "Tuesday"); root_Arr.insert(3, "Wednesday"); root_Arr.insert(4, "Thursday"); root_Arr.insert(5, "Friday"); root_Arr.insert(6, "Saturday");
//创建Json文档 QJsonDocument root_Doc; root_Doc.setArray(root_Arr); QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式// QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式// qDebug() << root_str; //中文输出乱码 QString strJson(root_str); qDebug() << strJson;}
输出结果
["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
4.构建数组JSON
void Create_Array_JSON(void){ QJsonObject day0_Obj; QJsonObject day1_Obj; QJsonObject day2_Obj;
day0_Obj.insert("date", "2019-07-21"); day0_Obj.insert("cond_txt", "多云"); day0_Obj.insert("cond_code", "101"); day0_Obj.insert("hum", "23"); day0_Obj.insert("tmp_H", "31"); day0_Obj.insert("tmp_L", "25");
day1_Obj.insert("date", "2019-07-21"); day1_Obj.insert("cond_txt", "阵雨"); day1_Obj.insert("cond_code", "107"); day1_Obj.insert("hum", "44"); day1_Obj.insert("tmp_H", "30"); day1_Obj.insert("tmp_L", "26");
day2_Obj.insert("date", "2019-07-22"); day2_Obj.insert("cond_txt", "晴"); day2_Obj.insert("cond_code", "100"); day2_Obj.insert("hum", "20"); day2_Obj.insert("tmp_H", "33"); day2_Obj.insert("tmp_L", "26");
QJsonArray weather_Arr; weather_Arr.insert(0, day0_Obj); weather_Arr.insert(1, day1_Obj); weather_Arr.insert(2, day2_Obj);