Qt平台下使用QJson构建JSON字符串

2020-07-16 19:55:04 浏览数 (1)

前言

上两篇文章介绍了使用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

0 人点赞