qt中生成含有中文的json文件,读取含有中文的json文件
生活随笔
收集整理的這篇文章主要介紹了
qt中生成含有中文的json文件,读取含有中文的json文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
引言
之前將變量保存并在本地生成json文件,由于其中含有中文,導致生成的json文件出現亂碼,或者就是生成的json文件沒有亂碼,但是讀取生成的json文件時出現亂碼,不能正常解析json.
示例
運行效果:
下面是生成的json文件的格式:
項目的結構:
此項目是基于Qt Application的控制臺程序。即
創建好項目之后,向項目中添加C++類文件,包含.h和.cpp文件,添加的時候選擇基類QObject。選擇基類是QObject的原因是為了可以使用信號槽。
下面是實現代碼:
main.cpp
jsongenrateparse.h
#ifndef JSONGENRATEPARSE_H #define JSONGENRATEPARSE_H#include <QObject>/********************************************======功能描述:=======1.生成含中文的json文件,2.解析含中文的json文件。注意:此文重要是生成的json文件中含有中文予以記錄。 ********************************************/class JsonGenrateParse : public QObject {Q_OBJECT public:explicit JsonGenrateParse(QObject *parent = nullptr);void createJson();//生成json文件void createQStringToJson();//創建json文件,直接使用QString變量賦值QString getExePath();//獲取可執行文件的路徑void readJsonFile();//讀取本地json文件void readQStringToJson();//讀取本地的json文件void parseJsonFile(QByteArray &byteArray);//解析json signals:public slots: };#endif // JSONGENRATEPARSE_Hjsongenrateparse.cpp
#include "jsongenrateparse.h" #include <QJsonDocument> #include <QJsonArray> #include <QJsonObject> #include <QJsonParseError> #include <QFile> #include <QCoreApplication> #include <QDebug>JsonGenrateParse::JsonGenrateParse(QObject *parent) : QObject(parent) {createJson();readJsonFile();qDebug()<<"=================";createQStringToJson();readQStringToJson(); }QString JsonGenrateParse::getExePath() {return QCoreApplication::applicationDirPath(); }void JsonGenrateParse::createJson() {QJsonObject rootObject;rootObject.insert("school",QString::fromLocal8Bit("數是中學"));//從utf-8編碼轉換為本地編碼rootObject.insert("address",QString::fromLocal8Bit("湖南"));rootObject.insert("grade",2);rootObject.insert("number",12332);QJsonDocument doc;doc.setObject(rootObject);QByteArray byteArray = doc.toJson(QJsonDocument::Compact);QString strPath = getExePath() + "/data.json";QFile file(strPath);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {qDebug()<<QStringLiteral("打開文件")<<strPath<<QStringLiteral("失敗!");}QTextStream out(&file);out<<byteArray;file.close(); }void JsonGenrateParse::readJsonFile() {QString strPath = getExePath() + "/data.json";QFile file(strPath);if (!file.open(QIODevice::ReadOnly)) {qDebug()<<QStringLiteral("打開文件")<<strPath<<QStringLiteral("失敗!");}QByteArray byteArray = file.readAll();byteArray = QString::fromLocal8Bit(byteArray).toUtf8();//從本地編碼轉換為utf-8編碼qDebug()<<"byteArray="<<byteArray.data();parseJsonFile(byteArray); }void JsonGenrateParse::createQStringToJson() {QString strSchool = QStringLiteral("海南");QString strAddr = QStringLiteral("胡說的");QJsonObject rootObject;rootObject.insert("school",strSchool);//從utf-8編碼轉換為本地編碼rootObject.insert("address",strAddr);rootObject.insert("grade",1);rootObject.insert("number",13234);QJsonDocument doc;doc.setObject(rootObject);QByteArray byteArray = doc.toJson(QJsonDocument::Compact);QString strPath = getExePath() + "/datass.json";QFile file(strPath);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {qDebug()<<QStringLiteral("打開文件失敗");}QTextStream out(&file);out<<byteArray;file.close(); }void JsonGenrateParse::readQStringToJson() {QString strPath = getExePath() + "/datass.json";QFile file(strPath);if (!file.open(QIODevice::ReadOnly)) {qDebug()<<QStringLiteral("打開文件")<<strPath<<QStringLiteral("失敗!");}QByteArray byteArray = file.readAll();byteArray = QString::fromLocal8Bit(byteArray).toUtf8();//從本地編碼轉換為utf-8編碼qDebug()<<"byteArray="<<byteArray.data();parseJsonFile(byteArray); }void JsonGenrateParse::parseJsonFile(QByteArray &byteArray) {QJsonParseError parseError;QJsonDocument doc = QJsonDocument::fromJson(byteArray,&parseError);if (!doc.isEmpty() && parseError.error == QJsonParseError::NoError) {QJsonObject rootObject = doc.object();qDebug()<<QStringLiteral("school:")<<rootObject.value("school").toString();qDebug()<<QStringLiteral("address:")<<rootObject.value("address").toString();qDebug()<<QStringLiteral("grade:")<<rootObject.value("grade").toInt();qDebug()<<QStringLiteral("number:")<<rootObject.value("number").toInt();}else {qDebug()<<QStringLiteral("解析json失敗!");} }上面寫了兩種創建含有中文的json文件的方式,其實質是一樣的,但是有雨作者不是很能準確的掌握和理解編碼格式,故而寫了兩種生成含有中文的json文件的方式,以備后面使用。
總結
以上是生活随笔為你收集整理的qt中生成含有中文的json文件,读取含有中文的json文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现mvcc_MySQL 的多版本并发控
- 下一篇: java gc堆中的分区_jvm内存各个