目录
JSON是什么
在QT中怎么操作JSON
QJsonValue(值类型):
QJsonArray(数组类型):
QJsonObject(对象类型):
QJsonDocument(文档类型):
JSON是什么
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于数据的存储和传输。它基于JavaScript语法,但已成为独立于编程语言的通用数据格式。
JSON使用简洁易读的文本格式表示数据,具有以下特点:
-
数据结构:JSON支持两种主要数据结构,即对象(Object)和数组(Array)。
- 对象由键值对组成,每个键值对之间使用冒号(:)分隔,键值对之间使用逗号(,)分隔,并且整个对象包含在大括号({})中。
- 数组由多个值组成,值之间使用逗号(,)分隔,并且整个数组包含在方括号([])中。
-
值类型:JSON支持多种值类型,包括字符串(String)、数字(Number)、布尔值(Bool)、空值(Null)、对象和数组。
-
字符串表示:JSON的字符串使用双引号("")表示,例如:"Hello, World!"。
-
嵌套结构:JSON允许通过将对象或数组作为值来创建复杂的嵌套结构。
下面是一个简单的JSON示例:
{ "name": "John Smith", "age": 30, "email": "john@example.com", "isStudent": false, "hobbies": ["reading", "traveling", "photography"], "address": { "street": "123 Main St", "city": "New York", "country": "USA" } }
复制
这个json数据首先用{}来表示整个数据是一个对象,这个对象里面包括name,age,email,isStudent这些值,还包括了一个hobbies数组,以及一个address对象,这个对象还包括了一些street,city,country的值。
在QT中怎么操作JSON
在Qt中使用QJsonValue(值类型),QJsoArray(数组类型),QJsonObject(对象类型),QjsonDocument(文档类型)。 这些类提供了处理JSON数据的基本工具。使用这些类的组合,可以解析、创建、修改和访问JSON数据。
QJsonValue(值类型):
QJsonValue是Qt中表示JSON值的类。它可以表示JSON的基本数据类型,如字符串、数字、布尔值,以及更复杂的数据结构,如对象和数组。QJsonValue具有以下常用函数:
isNull()
:检查QJsonValue是否为空。1.isUndefined()
:检查QJsonValue是否未定义。isBool()
:检查QJsonValue是否是布尔值。isDouble()
:检查QJsonValue是否是双精度浮点数。isString()
:检查QJsonValue是否是字符串。isObject()
:检查QJsonValue是否是对象。isArray()
:检查QJsonValue是否是数组。toBool()
:将QJsonValue转换为布尔值。toDouble()
:将QJsonValue转换为双精度浮点数。toString()
:将QJsonValue转换为字符串。toInt(): 将
QJsonValue转换为整型
代码:
//构建对象,可以是bool,int,QString,char*,json对象,json数组 //json值,double类型 QJsonValue jsonValue(true); QJsonValue jsonValue1(1); QJsonValue jsonValue2(QString("string")); QJsonValue jsonValue3(1.11111); QJsonValue jsonValue4(QJsonObject({{"a",1}})); QJsonValue jsonValue5(jsonValue); //判断值的类型 if(jsonValue.isBool()){ qDebug()<<"是Bool类型"; } if(jsonValue4.isObject()){ qDebug()<<"是json对象类型"; } if(jsonValue2.isString()){ qDebug()<<"是String类型"; } //获取值 qDebug()<<jsonValue.toBool(); qDebug()<<jsonValue1.toInt(); qDebug()<<jsonValue2.toString(); qDebug()<<jsonValue3.toDouble(); qDebug()<<jsonValue4.toObject().value("a").toInt(); qDebug()<<jsonValue5.toBool(); //获取值的类型 qDebug()<<jsonValue1.type();
复制
QJsonArray(数组类型):
QJsonArray(数组类型): QJsonArray是Qt中表示JSON数组的类。它可以包含多个QJsonValue对象,表示一组有序的JSON值。QJsonArray提供了以下常用函数:
append()
:将QJsonValue添加到数组末尾。- insert(0: 在指定位置插入数据。
at()
:返回数组中给定索引处的QJsonValue。size()
:返回数组的大小(元素数量)。- isEmpty():判断数组是否为空。
代码:
//构建对象 QJsonArray jsonArray={"age",22,QString("Ryan")}; QJsonValue value(2023); QJsonValue value1("日期"); //在末尾添加数据 jsonArray.append(value); //插入数据 jsonArray.insert(0,value1); //获取指定位置的值 qDebug()<<jsonArray.at(0).toString(); //指向数组第一项 qDebug()<<*jsonArray.begin(); //判断数组是否为空 if(!jsonArray.isEmpty()){ qDebug()<<"数组不为空"; } //判断数组的大小 qDebug()<<jsonArray.size(); //输出全部键值对 for(int i =0 ;i<jsonArray.size();i++){ qDebug()<<jsonArray.at(i); }
复制
QJsonObject(对象类型):
QJsonObject是Qt中表示JSON对象的类。它可以包含多个键值对,其中每个键都是字符串,对应的值是一个QJsonValue对象。QJsonObject提供了以下常用函数:
insert()
:将键值对插入到对象中。remove()
:从对象中删除指定键的键值对。contains()
:检查对象是否包含指定的键。value()
:返回与给定键关联的QJsonValue。keys()
:返回对象中所有键的列表。
代码:
//直接构建json对象 QJsonObject jsonObj{{"A",1},{"B",2},{"C",3}}; //返回指向json对象的第一项 qDebug()<<jsonObj.begin().key(); qDebug()<<jsonObj.begin().value().toInt(); //指向寻找的键的那一项 qDebug()<<jsonObj.constFind("A").key(); qDebug()<<jsonObj.constFind("A").value().toInt(); //判断json对象是否存在这个键 if(jsonObj.contains("A")){ qDebug()<<"存在"; } //返回json对象键值对的数量 qDebug()<<jsonObj.count(); qDebug()<<jsonObj.size(); //删除某个键 jsonObj.remove("A"); if(!jsonObj.contains("A")){ qDebug()<<"删除A成功"; } jsonObj.take("B"); if(!jsonObj.contains("B")){ qDebug()<<"删除B成功"; } //取得某个键的值 qDebug()<<"C:"<<jsonObj.value("C").toInt(); //插入数据 jsonObj.insert("age",10); //遍历 输出数组所有数据 for(auto it = jsonObj.begin();it!=jsonObj.end();it++){ qDebug()<<it.key()<<it.value(); }
复制
QJsonDocument(文档类型):
QJsonDocument是Qt中表示整个JSON文档的类。它可以将JSON数据解析为QJsonObject或QJsonArray,或将QJsonObject或QJsonArray转换为JSON字符串。QJsonDocument提供了以下常用函数:
fromJson()
:将JSON字符串解析为QJsonDocument对象。toVariant()
:将QJsonDocument转换为QVariant对象。toJson()
:将QJsonDocument对象转换为JSON字符串。isObject()
:检查QJsonDocument是否表示JSON对象。isArray()
:检查QJsonDocument是否表示JSON数组。
代码:
//构建对象 QJsonDocument jsonDocu(jsonObj); if(jsonDocu.isObject()){ qDebug()<<"是对象"; } //以JSON格式输出对象的全部数据 qDebug()<<jsonDocu.toJson(); QJsonDocument jsonDocu2(jsonArray); if(jsonDocu.isObject()){ qDebug()<<"是数组"; } //以JSON格式输出数组的全部数据 qDebug()<<jsonDocu2.toJson();
复制
感谢阅读,下期更新json文档的解析!!!