qt json入门
前言:和上一篇的qt socket一样都是0基础开始,纯小白,下面是自己在学习json中总结出来的东西
json是什么?
在与服务端的数据传输中,通常一次传输一串数据,可能有图片,数组,类等等,为了在数据流中区分这些东西,我们需要一种通用格式来记录一次数据传输到底传了什么.json就是这样的一种数据格式
json基础知识
json内的数据由值和它的名称组成,名称应该用""框住(不是必须),名称被称为键,中间加以冒号,这样的数据被称为键值对,即
"name":value
数据之间用,隔开,如果一个数据的值为字符串,则应该用""引起来,如果一个数据的值是数组,那么就应该用[]框住,如果值是对象,则应该使用{}框住.整个json类型的数据最外围也应该用{}框住
实例:
{
"number": 1,
"char_array": "i am char_array",
"bool": true,
"null": null,
"array": [1, 2, {
"num": 3
}],
"object": {
"number": 2,
"char_array": "i am in a class"
}
}
https://www.bejson.com/这个网站可以查看自己的json格式是否正确
其实整个json文件就是一个大的对象,而内部又可以包含许多小对象,而小对象里的数据也要符合上面的规则,对象可以在数组里面,但是必须要用{}标注
在qt内部的json数值读取
qt提供了QJsonDocument类用于读取json数值
QJsonDocument由QJsonObject类(对象)和QJsonArray类(数组)组成
基本用法
QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR);//用于生成json
QByteArray QJsonDocument::toJson(JsonFormat format = Indented) const;//用于解析json
setArray(const QJsonArray &array);//设置一个数组
setObject(const QJsonObject &object);//设置一个对象
array() const;//返回其设置的QJsonArray类
object() const;//返回其设置的QJsonObject类
QJsonObject用于处理键值对,可以添加多个键值对组成一个对象
基本用法
insert(const QString &key, const QJsonValue &value);//第一个参数为键,第二个参数为值
contains(const QString &key) const;//判断是否含有某个键值对
value(const QString &key) const;//返回键对应的值
take(const QString &key);//移除键对应的值
QJsonArray用于处理数组
append(const QJsonValue &value);//数组增加一个元素
可以注意到上面的参数中都有一个QJsonValue类,QJsonValue用于qt能够接受的数值类型与json类型数值的转化,也就是说可以通过构造函数生成QJsonValue类型的数据
QJsonValue(bool b)
QJsonValue(double n)
QJsonValue(int n)
QJsonValue(qint64 n)
QJsonValue(const QString &s)
QJsonValue(QLatin1String s)
QJsonValue(const char *s)
//支持的构造函数
也可以将其转化为我们需要的数据类型,甚至是QJsonObject 和QJsonArray类型
toArray(const QJsonArray &defaultValue) const
toArray() const
toBool(bool defaultValue = false) const
toDouble(double defaultValue = 0) const
toInt(int defaultValue = 0) const
toObject(const QJsonObject &defaultValue) const
toObject() const
toString() const
toString(const QString &defaultValue) const
toVariant() const
或者判断是哪种类型
isArray() const
isBool() const
isDouble() const
isNull() const
isObject() const
isString() const
isUndefined() const//用于解析json数据的类型,因为传输过程中键值对的顺序不做保证,但是数组内部的顺序除外