日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt中生成含有中文的json文件,读取含有中文的json文件

發布時間:2024/9/27 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt中生成含有中文的json文件,读取含有中文的json文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

之前將變量保存并在本地生成json文件,由于其中含有中文,導致生成的json文件出現亂碼,或者就是生成的json文件沒有亂碼,但是讀取生成的json文件時出現亂碼,不能正常解析json.

示例

運行效果:

下面是生成的json文件的格式:

{"school":"數是中學","address":"湖南","grade":2,"number":12332 }``` 和 ```cpp {"address": "胡說的","grade": 1,"number": 13234,"school": "海南" }

項目的結構:

此項目是基于Qt Application的控制臺程序。即

創建好項目之后,向項目中添加C++類文件,包含.h和.cpp文件,添加的時候選擇基類QObject。選擇基類是QObject的原因是為了可以使用信號槽。
下面是實現代碼:
main.cpp

#include <QCoreApplication> #include "jsongenrateparse.h"int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);JsonGenrateParse j;return a.exec(); }

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_H

jsongenrateparse.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文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。