Qt与JSON相关的操作
Part ONE.
关于JSON
JSON (JavaScript Object Notation) is a lightweight data-interchange format.
JSON(JavaScript Object Notation)是一款轻量级的数据交换格式。
Part TWO.
建立JSON中的Object
在Qt中,用QJsonObject类定义Json对象。
-
通过初始化列表创建QJsonObject
QJsonObject obj{ {"Name", "Mg"}, //每个键值对用大括号包裹住 {"Age", 18}, {"Gender", "Man"}, {"LovedColor", QJsonArray{ //通过构造器添加array "Red", "White" }} }; QDebug() << obj;
-
增删键值对
QJsonObject obj; obj.insert("Name", "Mg"); //给Json对象添加键值对 obj.insert("Age", 18); obj.insert("Gender", "male"); qDebug() << obj; QJsonObject book{ {"BookName", "The Little Prince"}, {"Author", "圣·埃克苏佩里"}, {"Price", 22.8} } obj.insert("HisBook", book); //键值对的值可以是QJsonObject对象 obj.remove("Gender"); //通过对key的搜索删除键值对,不能通过下标索引! qDebug() << obj;
建立JSON中的Array
在Qt中,用QJsonArray定义Json数组。
-
创建QJsonArray对象
QJsonArray array{ "Apple", "Banana", QJsonObject{ //通过QJsonObject构造器在QJsonArray的格式化列表中添加对象,类似的,也可以该数组中添加其他数组,无限套娃 {"Name", "Cherry"}, {"Color", "Red"} } }; qDebug() << array;
-
增删元素
QJsonArray array{"Peach"}; array.append("Apple"); //在数组末尾追加元素 array.insert(0, "Banana"); //在指定位置添加元素 qDebug() << array; array.removeAt(1); //删除指定位置的元素 qDebug() << array;
JSON的文件操作
在Qt中,通过QJsonDocument类实现对json文件的读写操作。
-
写入操作
/** 第一步:将目标JSON对象转化成字节数组 */ QJsonObject obj{ //1. 先创建要写入的对象 {"name", "Mg"}, {"age", 18}, {"lovedColor", QJsonArray{"red", "white"}} }; QJsonDocument doc(obj); //2. 再创建QJsonDocument对象 QByteArray docByte = doc.toJson(); //3. 通过toJson方法将相关键值对转化成字节数组 /** 第二步:将字节数组写入到文件中 */ QFile fp(":/MyJson.json"); if (!fp.open(QIODevice::WriteOnly)){ qDebug() << "Write Failed!"; return 0; } fp.write(docByte); fp.close();
-
读取操作
/** 第一步:写出json文件中的信息,并存放在QByteArray对象中 */ QFile fp(":/info.json"); if (!fp.open(QIODevice::ReadOnly)){ qDebug() << "Read Failed!"; return; } QByteArray docByte = fp.readAll(); /** 第二步:将字节数组转化为QJsonObject对象 */ QJsonParseError error; //建立异常 QJsonDocument doc = QJsonDocument::formJson(docByte, &error); if (error.error == QJsonParseError::NoError && !doc.isNull()){ ui->label->setText(doc.object().value("showInfomation").toString()); //异常处理 } qDebug() << doc;
The END.
- QJsonDocument中的toJson方法,可以传入枚举值,而控制写入的方式。
- Qt中,貌似是通过键值对的key首字母顺序输出为字符传,而不是根据代码中写入的顺序。