JSON数据使用
JSON数据格式的使用主要用于的数据的序列化,主要用于数据的网络传输,以及持久化保存数据;
JSON的语法结构包括以下几部分内容:
- 数组(Array)用方括号(“
[]
”)表示。 - 对象(0bject)用大括号(“
{}
”)表示。 - 名称/值对(
name/value
)组合成数组和对象。 - 名称(
name
)置于双引号中,值(value
)有字符串、数值、布尔值、null、对象和数组。 - 并列的数据之间用逗号(“
,
”)分隔
{
"features":[
{
"id":1,
"geometry":{
"type":"Point",
"coordinates":[
533958.52189999819,
3123489.1460000016
]
}
},
{
"id":1,
"geometry":{
"type":"Point",
"coordinates":[
533958.52189999819,
3123489.1460000016
]
}
},
]
}
QT 中JSON的常见API
QJsonObject:JSON 对象是键值对的列表,其中键是唯一的字符串,值由 QJsonValue 表示
// 生成或者构造一个的QJsonObject
QJsonObject::QJsonObject()
// 插入一个新item 键值为key,值为value
QJsonObject::iterator QJsonObject::insert(const QString &key, const QJsonValue &value)
// 返回对象锁拥有item的数量
int QJsonObject::count() const
int QJsonObject::size() const
int QJsonObject::length() const
// 通过key获得对应的value值
QJsonValue operator[](const QString &key) const
QJsonValue value(QStringView key) const
// 获得所有的key值列表
QStringList keys() const
检测key值是否存在
QJsonObject::iterator find(const QString &key)
bool contains(const QString &key) const
QJsonArray:类封装了一个 JSON 数组
// 构造的一个对象
QJsonArray(QJsonArray &&other)
// 删除一个独享
void pop_back()
void pop_front()
// 头部添加一个值
void prepend(const QJsonValue &value)
// 尾部添加一个值
void push_back(const QJsonValue &value)
// 头部添加一个值
void push_front(const QJsonValue &value)
// 删除一个值
void removeAt(int i)
void removeFirst()
void removeLast()
QJsonValue:将值封装在 JSON 中
// 构造一个对象
QJsonValue(QJsonValue & 其他)
QJsonValue(const QJsonValue &other)
QJsonValue(const QJsonObject &o)
QJsonValue(const QJsonArray &a)
QJsonValue(const char *s)
QJsonValue(QLatin1String s)
QJsonValue(const QString &s)
// 判断指的类型
bool isArray() const
bool isBool() const
bool isDouble() const
bool isNull() const
bool isObject() const
bool isString() const
bool isUndefined() const
// 转为指定的对象的类型
QJsonArray toArray(const QJsonArray &defaultValue) const
QJsonArray toArray() const
bool toBool(bool defaultValue = false) const
double toDouble(double defaultValue = 0) const
int toInt(int defaultValue = 0) const
QJsonObject toObject(const QJsonObject &defaultValue) const
QJsonObject toObject() const
QString toString() const
QString toString(const QString &defaultValue) const
QVariant toVariant() const
QJsonValue::Type type() const
QJsonDocument:提供了一种读取和写入 JSON 文档的方法,他可以从一个UTF-8编码表示的,以及Qt本身的二进制的格式读取和写入的该文档,QJsonObject 和 QJsonArray这两个对象是不能直接转换为的字字符串类型的,需要通过的QJsonDocument进行转化
// 构造一个对象
QJsonDocument(QJsonDocument &&other)
QJsonDocument(const QJsonDocument &other)
QJsonDocument(const QJsonArray &array)
QJsonDocument(const QJsonObject &object)
QJsonDocument()
将QJSONDocument 对象的中的数据进行的序列化
QByteArray toJson() const
QByteArray toJson(QJsonDocument::JsonFormat format) const
// 解析字符串
QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = nullptr)
QJsonDocument fromVariant(const QVariant &variant)
QJsonArray array() const
bool isArray() const
bool isEmpty() const
bool isNull() const
bool isObject() const
生成JSON数据格式
QJsonObject rootObj;
//插入name字段
rootObj.insert("name","China");
//插入info字段
QJsonObject infoobj;
infoobj.insert("caiptal","背景");
infoobj.insert("asian",true);
infoobj.insert("founded",1949);
rootObj.insert("info",infoobj);
//插入的provinces字段
QJsonArray provices;
QJsonObject provices_shandong;
provices_shandong.insert("name","山东");
provices_shandong.insert("capital","济南");
QJsonObject provices_zhejiang;
provices_zhejiang.insert("name","浙江");
provices_zhejiang.insert("capital","杭州");
provices.append(provices_zhejiang);
provices.append(provices_shandong);
rootObj.insert("province",provices);
// 将输出的root变为json格式
QJsonDocument doc(rootObj);
QByteArray json= doc.toJson();
qDebug()<<QString(json).toUtf8().data();
QFile file("D:\\qt_learn\\demo.json");
file.open(QFile::WriteOnly);
file.write(json);
file.close();
生成的JSON文件如下所示:
JSON数据格式解析
void from_json(){
QFile file("D:\\qt_learn\\demo.json");
file.open(QFile::ReadOnly);
QByteArray json= file.readAll();
file.close();
QJsonDocument doc =QJsonDocument::fromJson(json);
//判断返回的是一个对象
if(!doc.isObject()){
qDebug()<<"Don't find information";
}
QJsonObject obj = doc.object();
// 获得对象的属性值
QStringList keys = obj.keys();
for(int i =0;i<obj.size();i++){
QString key = keys[i];
QJsonValue value = obj.value(key);
if(value.isBool()){
qDebug()<<value.toBool();
}else if(value.isDouble()){
qDebug()<<value.toDouble();
}else if(value.isObject()){
qDebug()<<key;
QJsonObject infoobj=value.toObject();
QString capital = infoobj["capital"].toString();
bool asian = infoobj["asian"].toBool();
QString founded = infoobj["founded"].toString();
qDebug()<<capital<<asian<<founded<<";";
}else if(value.isArray()){
QJsonArray provinces = value.toArray();
for(int i = 0;i<provinces.size();i++){
QJsonObject obj =provinces[i].toObject();
QString name = obj["name"].toString();
QString capital =obj["capital"].toString();
qDebug()<<"capital:"<<capital<<";name"<<name;
}
}else if(value.isString()){
qDebug()<<value.toString();
}
}
}
输出结果为: