江西建设银行招聘网站,seo网络优化是什么工作,中国互联网协会会员单位,做婚纱网站策划方案一.前言#xff1a; JSON是一种轻量级数据交换格式#xff0c;常用于客户端和服务端的数据交互#xff0c;不依赖于编程语言#xff0c;在很多编程语言中都可以使用JSON#xff0c;比如C#xff0c;C#xff0c;Java#xff0c;Android#xff0c;Qt。除了JSON#x…一.前言 JSON是一种轻量级数据交换格式常用于客户端和服务端的数据交互不依赖于编程语言在很多编程语言中都可以使用JSON比如CCJavaAndroidQt。除了JSON还有一种数据传输格式XML相较于XMLJSON更加便于阅读和书写。 JSON 有两种数据格式JSON对象和JSON数组。被中括号包裹的是JSON数组被大括号包裹的是JSON对象。
二.JSON数组 JSON数组的格式[元素1元素2元素3…] 示例1元素可以是不同数据类型
[1,2,3.14,hello world,true,null]示例2元素可以是JSON对象或JSON数组
[{id:123,name:tom},[1,2,3.14,hello world,true,null]
]三.JSON对象 JSON对象的格式一个或多个键值对组成 示例1
{id:123,name:tom
}示例2嵌套JSON对象和JSON数组JSON对象和JSON数组也要使用键值对格式
{name: John Doe,age: 30,address: {city: New York,street: 123 Main St},phoneNumbers: [{type: home,number: 555-1234},{type: work,number: 555-5678}],hobbies: [reading, painting, playing guitar],isStudent: true
}小结JSON数组里可以包含JSON对象或JSON数组JSON对象里也可以嵌套JSON对象或JSON数组。
四.Qt中JSON的使用1.生成JSON数据、2.解析JSON数据 在QT5.0版本以后支持对JSON的使用QT5.0之前需要自己集成第三方库。 1.生成JSON数据 要生成的JSON数据如下
{name: 小王,age: 30,address: {city: 北京,street: 人民路32号},phoneNumbers: [{number: 999-123456,type: 家},{number: 999-654321,type: 公司}]
}使用Qt生成上面的JSON数据
#include QJsonObject
#include QJsonArray
#include QJsonDocument
#include QDebug
void MainWindow::writeJSON()
{// 创建最外层的 JSON 对象里面包含要构建的所有 JSON 数据QJsonObject rootObj;// 插入 name 键值对到 rootObjrootObj.insert(name,小王);// 插入 age 键值对到 rootObjrootObj.insert(age,30);// 创建地址 JSON 对象里面包含两个键值对QJsonObject addressObj;addressObj.insert(city,北京);addressObj.insert(street,人民路32号);// 插入地址 JSON 对象到 rootObjrootObj.insert(address,addressObj);// 创建电话 JSON 数组里面包含两个电话 JSON 对象QJsonArray phoneArray;// 创建两个电话 JSON 对象QJsonObject phoneHomeObj;phoneHomeObj.insert(type,家);phoneHomeObj.insert(number,999-123456);QJsonObject phoneWorkObj;phoneWorkObj.insert(type,公司);phoneWorkObj.insert(number,999-654321);// 在电话 JSON 数组中添加两个电话 JSON 对象phoneArray.append(phoneHomeObj);phoneArray.append(phoneWorkObj);// 插入电话 JSON 数组到 rootObjrootObj.insert(phoneNumbers,phoneArray);// 将 rootObj JSON对象转换为 JSON 数据格式QJsonDocument doc(rootObj);QByteArray json doc.toJson();// 打印qDebug()QString::fromUtf8(json);
}2.解析JSON数据 要解析的JSON数据如下先将它放在test.json文本文件中
{name: 小王,age: 30,address: {city: 北京,street: 人民路32号},phoneNumbers: [{number: 999-123456,type: 家},{number: 999-654321,type: 公司}]
}使用Qt解析上面的JSON数据
#include QJsonObject
#include QJsonArray
#include QJsonDocument
#include QDebug
#include QFile
void MainWindow::analyseJSON()
{// 读取文本中的 JSON 数据QFile file(C:\\Users\\A\\Desktop\\temp\\test.json);file.open(QFile::ReadOnly);QByteArray json file.readAll();file.close();// 将 JSON 数据转换为 QJsonDocument 对象QJsonDocument doc QJsonDocument::fromJson(json);if(!doc.isObject()){// 不是 JSON 对象JSON 字符串格式错误或无效qDebug()不是 JSON 对象JSON 字符串格式错误或无效;return;}// 将 QJsonDocument 对象中的 JSON 数据转换为 JSON 对象QJsonObject obj doc.object();// 获取 JSON 数据中的所有键QStringList keys obj.keys();// 遍历键值对for (int i 0;ikeys.size();i) {// 获取每一个 keyQString key keys[i];// 通过 key 获取对应的 valueQJsonValue value obj.value(key);if(value.isBool()){// 值是一个 boolqDebug()key:value.toBool();}else if(value.isString()){// 值是一个字符串qDebug()key:value.toString();}else if(value.isDouble()){// 值是一个 double 或者 int(double 和 int 都用 isDouble)qDebug()key:value.toInt();}else if(value.isObject()){// 值是一个 JSON 对象qDebug()key:;// 这里偷个懒不再像上面那样循环获取值了而是直接通过已知的键去获取值QJsonObject addressObj value.toObject();QString city addressObj[city].toString();QString street addressObj[street].toString();qDebug() city:city;qDebug() street:street;}else if (value.isArray()){// 值是一个 JSON 数组qDebug()key:;QJsonArray phoneArray value.toArray();for (int i 0;iphoneArray.size();i) {// 遍历 JSON 数组中的每一个 JSON 对象QJsonObject phoneObj phoneArray[i].toObject();QString number phoneObj[number].toString();QString type phoneObj[type].toString();qDebug() number:number;qDebug() type:type;}}}
}