赞
踩
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输和存储。它具有以下特点:
易读性:JSON 使用人类可读的文本格式表示数据,采用键值对的方式组织数据,易于阅读和编辑。
轻量级:JSON 数据格式较为简洁,不包含冗余信息,适合网络传输和存储。
自描述性:JSON 数据的结构清晰明了,键值对以及数组的嵌套结构能够清晰地表示复杂数据。
易于解析:JSON 数据可以方便地被解析成多种编程语言中的数据结构,如对象、数组等。
跨平台兼容:由于 JSON 是一种文本格式,不依赖特定的编程语言,能够被多种编程语言解析和生成。
JSON 数据通常由对象(Object)和数组(Array)组成:
总之,JSON 是一种简单、轻量级、易读的数据交换格式,被广泛应用于 Web 开发、API 设计和数据交换等领域。通过了解 JSON 的基本概念和语法规则,可以更好地进行数据交互与处理。
示例代码如下:
#include <QCoreApplication> #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建 JSON 对象 QJsonObject personObject; personObject["name"] = "Alice"; personObject["age"] = 30; personObject["isStudent"] = true; QJsonArray fruitsArray = {"apple", "banana", "cherry"}; personObject["favoriteFruits"] = fruitsArray; QJsonObject addressObject; addressObject["city"] = "New York"; addressObject["zipcode"] = "10001"; personObject["address"] = addressObject; // 将 JSON 对象转换为 JSON 文档 QJsonDocument jsonDocument(personObject); // 将 JSON 文档转换为 JSON 字符串 QString jsonString = jsonDocument.toJson(); qDebug() << "Generated JSON string:" << jsonString; // 解析 JSON 字符串为 JSON 文档 QJsonDocument parsedDocument = QJsonDocument::fromJson(jsonString.toUtf8()); if (!parsedDocument.isNull() && parsedDocument.isObject()) { QJsonObject parsedObject = parsedDocument.object(); QString name = parsedObject["name"].toString(); int age = parsedObject["age"].toInt(); bool isStudent = parsedObject["isStudent"].toBool(); qDebug() << "Parsed name:" << name; qDebug() << "Parsed age:" << age; qDebug() << "Parsed isStudent:" << isStudent; } else { qDebug() << "Failed to parse JSON"; } return a.exec(); }
示例代码如下:
#include <QCoreApplication> #include <QJsonObject> #include <QJsonArray> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建一个空的 JSON 对象 QJsonObject personObject; // 添加键值对到 JSON 对象 personObject["name"] = "Alice"; personObject["age"] = 30; personObject["isStudent"] = true; // 创建包含一组值的 JSON 数组 QJsonArray fruitsArray = {"apple", "banana", "cherry"}; personObject["favoriteFruits"] = fruitsArray; // 创建一个嵌套的 JSON 对象 QJsonObject addressObject; addressObject["city"] = "New York"; addressObject["zipcode"] = "10001"; personObject["address"] = addressObject; // 访问和输出 JSON 对象中的值 qDebug() << "Name:" << personObject["name"].toString(); qDebug() << "Age:" << personObject["age"].toInt(); qDebug() << "Is Student:" << personObject["isStudent"].toBool(); // 访问嵌套的 JSON 对象中的值 QJsonObject nestedAddress = personObject["address"].toObject(); qDebug() << "City:" << nestedAddress["city"].toString(); qDebug() << "Zipcode:" << nestedAddress["zipcode"].toString(); // 修改 JSON 对象中的值 personObject["age"] = 35; // 移除 JSON 对象中的某个键值对 personObject.remove("isStudent"); // 转换 JSON 对象为字符串 QJsonDocument jsonDocument(personObject); QString jsonString = jsonDocument.toJson(); qDebug() << "Updated JSON object:" << jsonString; return a.exec(); }
#include <QCoreApplication> #include <QJsonObject> #include <QJsonArray> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建一个空的 JSON 数组 QJsonArray fruitsArray; // 向 JSON 数组添加元素 fruitsArray.append("apple"); fruitsArray.append("banana"); fruitsArray.append("cherry"); // 创建一个包含多个不同类型元素的 JSON 数组 QJsonArray mixedArray; mixedArray.append(10); mixedArray.append(true); mixedArray.append("hello"); // 输出数组元素 qDebug() << "Fruits in the array:"; for(const QJsonValue &value : fruitsArray) { qDebug() << value.toString(); } qDebug() << "Elements in mixed array:"; for(const QJsonValue &value : mixedArray) { if(value.isBool()) { qDebug() << value.toBool(); } else if(value.isDouble()) { qDebug() << value.toDouble(); } else if(value.isString()) { qDebug() << value.toString(); } } // 访问数组元素 qDebug() << "First fruit:" << fruitsArray.at(0).toString(); qDebug() << "Last fruit:" << fruitsArray.last().toString(); // 修改数组元素 fruitsArray.replace(1, "pear"); // 移除数组元素 fruitsArray.removeAt(2); // 转换 JSON 数组为字符串 QJsonDocument jsonDocument(fruitsArray); QString jsonString = jsonDocument.toJson(); qDebug() << "Updated JSON array:" << jsonString; return a.exec(); }
在 Qt 中,QString 和 QByteArray 是两种用于处理字符串数据的类,它们在存储和操作字符串上有一些不同之处。下面是关于 QString 和 QByteArray 的详细介绍:
QString
QString 是 Qt 中用于表示 Unicode 字符串的类,它支持多种字符编码,包括 UTF-8、UTF-16 等。
特点:
使用场景:
QByteArray
特点:
使用场景:
总结
如果需要处理文本数据,并且涉及到字符串操作、多语言支持或者用户界面相关的文本处理,通常使用 QString。
如果处理的数据为字节数据、二进制数据或者不需要特定字符编码的数据,可以使用 QByteArray。
{
"Name":"Ace",
"Sex":"man",
"Age":20,
"Family":{
"Father":"Gol·D·Roger",
"Mother":"Portgas·D·Rouge",
"Brother":["Sabo", "Monkey D. Luffy"]
},
"IsAlive":false,
"Comment":"yyds"
}
void MainWindow::writeJson() { //创建一个Json对象 QJsonObject obj;//对象可以说是和map一模一样 //"Ace"发生了隐式类型转换 obj.insert("name","Ace"); obj.insert("sex","man"); obj.insert("age",20); //创建子对象 QJsonObject subObj; subObj.insert("father","Gol·D·Roger"); subObj.insert("Mother","Portgas·D·Rouge"); //构建一个Json数组的对象 QJsonArray array; array.append("Sabo"); array.append("Monkey D. Luffy"); subObj.insert("Brother",array); obj.insert("Family",subObj); obj.insert("IsAlive",false); obj.insert("Comment","yyds"); //将json的对象转换成文档类型 QJsonDocument doc(obj); //将其转换成字符串类型,QByteArray在qt中就是表示字符串 QByteArray json = doc.toJson(); //写入磁盘文件中 QFile file("G:\\qtcodetest\\QJsonTest\\mytest.json"); file.open(QFile::WriteOnly); file.write(json); file.close(); }
void MainWindow::readJson() { //读文件 QFile file("G:\\qtcodetest\\QJsonTest\\mytest.json"); file.open(QFile::ReadOnly); QByteArray all = file.readAll(); file.close(); //读出的文件进行转换 QJsonDocument doc = QJsonDocument::fromJson(all); if(doc.isObject()) { QJsonObject obj = doc.object(); QStringList keys = obj.keys(); for(int i=0; i<keys.size(); ++i) { QString key = keys.at(i); QJsonValue value = obj.value(key); if(value.isBool()) { qDebug() << key << ":" << value.toBool(); } if(value.isString()) { qDebug() << key << ":" << value.toString(); } if(value.isDouble()) { qDebug() << key << ":" << value.toInt(); } if(value.isObject()) { qDebug()<< key << ":"; // 直接处理内部键值对, 不再进行类型判断的演示 QJsonObject subObj = value.toObject(); QStringList ls = subObj.keys(); for(int i=0; i<ls.size(); ++i) { QJsonValue subVal = subObj.value(ls.at(i)); if(subVal.isString()) { qDebug() << " " << ls.at(i) << ":" << subVal.toString(); } if(subVal.isArray()) { QJsonArray array = subVal.toArray(); qDebug() << " " << ls.at(i) << ":"; for(int j=0; j<array.size(); ++j) { // 因为知道数组内部全部为字符串, 不再对元素类型进行判断 qDebug() << " " << array[j].toString(); } } } } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。