查看原文
其他

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

wcc149 电子电路开发学习 2021-01-31

前言

上两篇文章介绍了使用cJSON库解析和构建JSON字符串Qt平台下使用QJson解析JSON字符串

本篇文章介绍,Qt开发环境下使用QJson库构建JSON字符串,开发平台基于Qt 5.8 Windows。

JSON的构建包括:

  • 简单的键值对

  • JSON对象作为键的值

  • JSON数组

  • JSON数组的嵌套

QJson构建JSON字符串示例

关于JSON字符串的介绍,可以参考JSON简介

首先,解析和构建都要包含如下头文件:

  1. #include <QJsonDocument>

  2. #include <QJsonObject>

  3. #include <QJsonArray>

1.构建一个简单的键值对JSON

  1. void Create_Simple_JSON(void)

  2. {


  3. //创建JSON对象

  4. QJsonObject root_Obj;

  5. //添加键值对,值的类型自动识别,顺序不可自定义

  6. root_Obj.insert("CSDN", "https://blog.csdn.net/whik1194");

  7. root_Obj.insert("cnblogs", "https://home.cnblogs.com/u/whik/");

  8. root_Obj.insert("Github", "https://github.com/whik/");

  9. root_Obj.insert("Blog", "https://www.wangchaochao.top/");

  10. root_Obj.insert("status", 1);

  11. root_Obj.insert("enable", true);

  12. root_Obj.insert("update_time", "20190723");


  13. //创建Json文档

  14. QJsonDocument root_Doc;

  15. root_Doc.setObject(root_Obj);

  16. QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式

  17. // QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式 QString strJson(root_str);

  18. QString strJson(root_str);

  19. qDebug() << strJson;

  20. }

输出结果

  1. {

  2. "Blog": "https://www.wangchaochao.top/",

  3. "CSDN": "https://blog.csdn.net/whik1194",

  4. "Github": "https://github.com/whik/",

  5. "cnblogs": "https://home.cnblogs.com/u/whik/",

  6. "enable": true,

  7. "status": 1,

  8. "update_time": "20190723"

  9. }

2.构建北京时间JSON字符串

  1. void Create_BJTime_JSON(void)

  2. {

  3. QJsonObject result_Obj;

  4. result_Obj.insert("timestamp", "ok");

  5. result_Obj.insert("datetime_1", "2019-07-21 10:46:57");

  6. result_Obj.insert("datetime_2", "2019年07月21日 10时46分57秒");

  7. result_Obj.insert("week_1", "0");

  8. result_Obj.insert("week_2", "星期日");

  9. result_Obj.insert("week_3", "周日");

  10. result_Obj.insert("week_4", "Sunday");


  11. QJsonObject root_Obj;

  12. //添加键值对,值的类型自动识别,顺序不可自定义

  13. root_Obj.insert("status", "success");

  14. root_Obj.insert("Blog", "www.wangchaochao.top");

  15. root_Obj.insert("result", result_Obj);


  16. //创建Json文档

  17. QJsonDocument root_Doc;

  18. root_Doc.setObject(root_Obj);

  19. QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式

  20. // QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式

  21. // qDebug() << root_str; //中文输出乱码

  22. QString strJson(root_str);

  23. qDebug() << strJson;

  24. }

输出结果

  1. {

  2. "status": "success",

  3. "result": {

  4. "timestamp": "ok",

  5. "datetime_1": "2019-07-21 10:46:57",

  6. "datetime_2": "2019年07月21日 10时46分57秒",

  7. "week_1": "0",

  8. "week_2": "星期日",

  9. "week_3": "周日",

  10. "week_4": "Sunday"

  11. },

  12. "Blog": "www.wangchaochao.top"

  13. }

3.构建字符串数组

  1. void Create_Array_Str_JSON(void)

  2. {

  3. QJsonArray root_Arr;


  4. root_Arr.insert(0, "Sunday");

  5. root_Arr.insert(1, "Monday");

  6. root_Arr.insert(2, "Tuesday");

  7. root_Arr.insert(3, "Wednesday");

  8. root_Arr.insert(4, "Thursday");

  9. root_Arr.insert(5, "Friday");

  10. root_Arr.insert(6, "Saturday");


  11. //创建Json文档

  12. QJsonDocument root_Doc;

  13. root_Doc.setArray(root_Arr);

  14. QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式

  15. // QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式

  16. // qDebug() << root_str; //中文输出乱码

  17. QString strJson(root_str);

  18. qDebug() << strJson;

  19. }

输出结果

  1. ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]

4.构建数组JSON

  1. void Create_Array_JSON(void)

  2. {

  3. QJsonObject day0_Obj;

  4. QJsonObject day1_Obj;

  5. QJsonObject day2_Obj;


  6. day0_Obj.insert("date", "2019-07-21");

  7. day0_Obj.insert("cond_txt", "多云");

  8. day0_Obj.insert("cond_code", "101");

  9. day0_Obj.insert("hum", "23");

  10. day0_Obj.insert("tmp_H", "31");

  11. day0_Obj.insert("tmp_L", "25");


  12. day1_Obj.insert("date", "2019-07-21");

  13. day1_Obj.insert("cond_txt", "阵雨");

  14. day1_Obj.insert("cond_code", "107");

  15. day1_Obj.insert("hum", "44");

  16. day1_Obj.insert("tmp_H", "30");

  17. day1_Obj.insert("tmp_L", "26");


  18. day2_Obj.insert("date", "2019-07-22");

  19. day2_Obj.insert("cond_txt", "晴");

  20. day2_Obj.insert("cond_code", "100");

  21. day2_Obj.insert("hum", "20");

  22. day2_Obj.insert("tmp_H", "33");

  23. day2_Obj.insert("tmp_L", "26");


  24. QJsonArray weather_Arr;

  25. weather_Arr.insert(0, day0_Obj);

  26. weather_Arr.insert(1, day1_Obj);

  27. weather_Arr.insert(2, day2_Obj);


  28. QJsonObject root_Obj;

  29. root_Obj.insert("status", "ok");

  30. root_Obj.insert("update", "2019-07-21 11:00");

  31. root_Obj.insert("Blog", "www.wangchaochao.top");

  32. root_Obj.insert("weather", weather_Arr); //数组作为weather键的值


  33. //创建Json文档

  34. QJsonDocument root_Doc;

  35. root_Doc.setObject(root_Obj);

  36. QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式

  37. // QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式

  38. // qDebug() << root_str; //中文输出乱码

  39. QString strJson(root_str);

  40. qDebug() << strJson;

  41. }

输出结果

  1. {

  2. "status": "ok",

  3. "weather": [{

  4. "date": "2019-07-21",

  5. "cond_txt": "多云",

  6. "cond_code": "101",

  7. "hum": "23",

  8. "tmp_H": "31",

  9. "tmp_L": "25"

  10. }, {

  11. "date": "2019-07-22",

  12. "cond_txt": "晴",

  13. "cond_code": "100",

  14. "hum": "20",

  15. "tmp_H": "33",

  16. "tmp_L": "26"

  17. }, {

  18. "date": "2019-07-23",

  19. "cond_txt": "阵雨",

  20. "cond_code": "107",

  21. "hum": "45",

  22. "tmp_H": "32",

  23. "tmp_L": "25"

  24. }],

  25. "update": "2019-07-21 11:00",

  26. "Blog": "www.wangchaochao.top"

  27. }

5.构建数组嵌套的JSON字符串

  1. void Create_Array_Nest_JSON(void)

  2. {

  3. QJsonArray table_Arr = {"地区", "92号汽油", "95号汽油", "98号汽油", "0号柴油"};

  4. QJsonArray bj_Arr = {"北京", "6.78", "7.21", "8.19", "6.45"};

  5. QJsonArray sh_Arr = {"上海", "6.74", "7.17", "7.87", "6.39"};

  6. QJsonArray js_Arr = {"江苏", "6.75", "7.18", "8.06", "6.37"};

  7. QJsonArray tj_Arr = {"天津", "6.77", "7.15", "8.07", "6.41"};


  8. QJsonArray data_Arr; //数组内嵌套了5个数组

  9. data_Arr.insert(0, table_Arr);

  10. data_Arr.insert(1, bj_Arr);

  11. data_Arr.insert(2, sh_Arr);

  12. data_Arr.insert(3, js_Arr);

  13. data_Arr.insert(4, tj_Arr);


  14. QJsonObject root_Obj;


  15. root_Obj.insert("status", "ok");

  16. root_Obj.insert("msg", "全国各省份汽柴油价格信息");

  17. root_Obj.insert("update", "2019-07-21");

  18. root_Obj.insert("About", "wcc");

  19. root_Obj.insert("Blog", "www.wangchaochao.top");

  20. root_Obj.insert("data", data_Arr); //数组作为键的值


  21. //创建Json文档

  22. QJsonDocument root_Doc;

  23. root_Doc.setObject(root_Obj);

  24. QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式

  25. // QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式

  26. // qDebug() << root_str; //中文输出乱码

  27. QString strJson(root_str);

  28. qDebug() << strJson;

  29. }

输出结果

  1. {

  2. "status": "ok",

  3. "msg": "全国各省份汽柴油价格信息",

  4. "update": "2019-07-21",

  5. "data": [

  6. ["地区", "92号汽油", "95号汽油", "98号汽油", "0号柴油"],

  7. ["北京", "6.78", "7.21", "8.19", "6.45"],

  8. ["上海", "6.74", "7.17", "7.87", "6.39"],

  9. ["江苏", "6.75", "7.18", "8.06", "6.37"],

  10. ["天津", "6.77", "7.15", "8.07", "6.41"]

  11. ],

  12. "About": "wcc",

  13. "Blog": "www.wangchaochao.top"

  14. }

参考资料

  • 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/

历史精选


我的博客:www.wangchaochao.top

或微信扫码关注我的公众号

由于微信文章不支持超链接,文中出现的软件、程序等文件下载,可以点击"阅读原文",跳转到我的博客文章进行下载。



原创不易,如果觉得我的文章对你有所帮助,可以随手点“好看”分享,你的支持将是我持续更新的动力。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存