前言
上两篇文章介绍了使用cJSON库解析和构建JSON字符串和Qt平台下使用QJson解析JSON字符串
本篇文章介绍,Qt开发环境下使用QJson库构建JSON字符串,开发平台基于Qt 5.8 Windows。
JSON的构建包括:
- 简单的键值对
- JSON对象作为键的值
- JSON数组
- JSON数组的嵌套
QJson构建JSON字符串示例
关于JSON字符串的介绍,可以参考JSON简介。
首先,解析和构建都要包含如下头文件:
代码语言:javascript复制#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>
1.构建一个简单的键值对JSON
代码语言:javascript复制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;}
输出结果
代码语言:javascript复制{ "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字符串
代码语言:javascript复制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;}
输出结果
代码语言:javascript复制{ "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.构建字符串数组
代码语言:javascript复制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;}
输出结果
代码语言:javascript复制["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
4.构建数组JSON
代码语言:javascript复制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);
QJsonObject root_Obj; root_Obj.insert("status", "ok"); root_Obj.insert("update", "2019-07-21 11:00"); root_Obj.insert("Blog", "www.wangchaochao.top"); root_Obj.insert("weather", weather_Arr); //数组作为weather键的值
//创建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;}
输出结果
代码语言:javascript复制{ "status": "ok", "weather": [{ "date": "2019-07-21", "cond_txt": "多云", "cond_code": "101", "hum": "23", "tmp_H": "31", "tmp_L": "25" }, { "date": "2019-07-22", "cond_txt": "晴", "cond_code": "100", "hum": "20", "tmp_H": "33", "tmp_L": "26" }, { "date": "2019-07-23", "cond_txt": "阵雨", "cond_code": "107", "hum": "45", "tmp_H": "32", "tmp_L": "25" }], "update": "2019-07-21 11:00", "Blog": "www.wangchaochao.top"}
5.构建数组嵌套的JSON字符串
代码语言:javascript复制void Create_Array_Nest_JSON(void){ QJsonArray table_Arr = {"地区", "92号汽油", "95号汽油", "98号汽油", "0号柴油"}; QJsonArray bj_Arr = {"北京", "6.78", "7.21", "8.19", "6.45"}; QJsonArray sh_Arr = {"上海", "6.74", "7.17", "7.87", "6.39"}; QJsonArray js_Arr = {"江苏", "6.75", "7.18", "8.06", "6.37"}; QJsonArray tj_Arr = {"天津", "6.77", "7.15", "8.07", "6.41"};
QJsonArray data_Arr; //数组内嵌套了5个数组 data_Arr.insert(0, table_Arr); data_Arr.insert(1, bj_Arr); data_Arr.insert(2, sh_Arr); data_Arr.insert(3, js_Arr); data_Arr.insert(4, tj_Arr);
QJsonObject root_Obj;
root_Obj.insert("status", "ok"); root_Obj.insert("msg", "全国各省份汽柴油价格信息"); root_Obj.insert("update", "2019-07-21"); root_Obj.insert("About", "wcc"); root_Obj.insert("Blog", "www.wangchaochao.top"); root_Obj.insert("data", data_Arr); //数组作为键的值
//创建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;}
输出结果
代码语言:javascript复制{ "status": "ok", "msg": "全国各省份汽柴油价格信息", "update": "2019-07-21", "data": [ ["地区", "92号汽油", "95号汽油", "98号汽油", "0号柴油"], ["北京", "6.78", "7.21", "8.19", "6.45"], ["上海", "6.74", "7.17", "7.87", "6.39"], ["江苏", "6.75", "7.18", "8.06", "6.37"], ["天津", "6.77", "7.15", "8.07", "6.41"] ], "About": "wcc", "Blog": "www.wangchaochao.top"}
参考资料
- JSON官方网站:
http://www.json.org/json-zh.html
分享几个免费的API提供平台:
- K780:
http://www.k780.com/api
- 天气API:
http://api.help.bj.cn/api/
- 心知天气:
https://www.seniverse.com/
- 和风天气:
http://www.heweather.com
- 聚合数据:
https://www.juhe.cn/
历史精选
- Qt平台下使用QJson解析JSON字符串
- 使用cJSON库解析和构建JSON字符串
- Qt实现软件自动更新的一种简单方法
- Qt小项目之串口助手控制LED