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文件的方式,以备后面使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年初新立Flag,新华三解决方案部做了点儿啥?

戳蓝字“CSDN云计算”关注我们哦&#xff01;极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;人人都提及的数字化时代&#xff0c;企业不想方设法提升效率怎么行&#xff1f…

idea gblfy常用快捷键

gblfy日常快捷键&#xff1a; 关键词说明idea中对应的操作CTRL左方向光标向左跳跃一个单词Editor Actions -> Move Caret to Previous WordCTRL右方向光标向右跳跃一个单词Editor Actions -> Move Caret to Next Wordmianmian方法输入main后按着(自动提示)alt/sout快速打…

看华为生态大学 如何玩转人才生态?

戳蓝字“CSDN云计算”关注我们哦&#xff01;极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;从孔子兴私学开始&#xff0c;千百年来&#xff0c;中国人在私塾中开始或完成自…

Hadoop精华问答 | 关于Hadoop核心技术的精华问答

戳蓝字“CSDN云计算”关注我们哦&#xff01;随着科技时代的发展&#xff0c;大数据与云计算已势不可挡的架势席卷未来&#xff0c;不可否认&#xff0c;大数据时代已经来临&#xff0c;并将深刻地改变着我们的工作和生活。学习大数据技术&#xff0c;是时代的召唤&#xff0c;…

如何将本地代码推送至远程仓库

文章目录一、现在远程仓库创建仓库二、本地操作流程1. 用idea打开项目2. 选择需要打开项目3. 选择这个窗口打开或者用一个新的窗口打开都可以4. 导入成功的项目结构三、将本地仓库的代码推送远程仓库1. 初始化本地git仓库2. 将项目代码提交到暂存区3. 将暂存区的代码提交到本地…

Open Infrastructure Summit 2019,炼就成功开源范示;阿里云居亚太市场第一;高通将获45亿美元和解金...

戳蓝字“CSDN云计算”关注我们哦&#xff01;重磅先知 Open Infrastructure Summit 2019,炼就成功开源范示云计算市场烽烟再起&#xff1a;阿里云位居亚太市场第一高通将从苹果公司获得至少45亿美元和解金重磅快报Open Infrastructure Summit 2019,炼就成功开源范示“开源不是…

以人为本、用“简”驭“繁”……统统都是新华三物联网的关键词儿!

戳蓝字“CSDN云计算”关注我们哦&#xff01;极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;初见2019 Navigate领航者峰会的展区&#xff0c;就被这个接地气的大屏幕吸引了…

我们应聘BAT等互联网公司,关于Spring到底需要掌握什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;阅读本文大概需要 3 分钟。之前分享过一些BAT面试必会的文章&#xff0c;一些读者看了…

java.lang.reflect.InvocationTargetException 的惨痛教训

记录发布webservice漏发内部类文件导致异常java.lang.reflect.InvocationTargetException 的惨痛教训 我的一个实现类中调用了一个内部类&#xff0c;在本地测试正常&#xff0c;发布服务期之后&#xff0c;soapUI共测试报 java.lang.reflect.InvocationTargetException &…

qt下实现文件的拖拽打开

引言 此文用于记录按下鼠标左键不放&#xff0c;拖动文件到程序中打开。该示例中只设置了可以拖动的文件类型为.h,.cpp,.txt这三种文件类型。 程序运行的效果&#xff1a; 示例 下面是具体的实现。 项目的结构&#xff1a; 具体的实现代码&#xff0c;如下&#xff1a; mai…

qt中使用QCompleter实现查找功能

引言 本文有两个例子&#xff0c;示例一中通过在combox中输入文本可以实现自动补全&#xff0c;用户根据提示列表&#xff0c;选中某一个信息&#xff0c;作为要搜索的字符串。示例二中用户输入要搜索的文本在行编辑器中&#xff0c;当输入的文本在搜索的字符串列表中时&#…

动图:程序员才懂的这些!

戳蓝字“CSDN云计算”关注我们哦&#xff01;1. Java VS C2. 功能先上了再说3.高级开发人员作为一个团队进行编程4. 调试CSS5. 编译错误&#xff1a;括号不匹配6.高级开发人员重构代码7. 看实习生编码的时候&#xff0c;我的表情...8.当我尝试进入BIOS9. 虽然很多Bug&#xff0…

表达祝福与喜悦的数字资产——平安夜的特别礼物华为云DAC

平安夜的街灯光闪烁&#xff0c;人们沉浸在节日气氛中&#xff0c;忙着购买礼物&#xff0c;准备晚餐&#xff0c;相互传递感恩与祝愿。华为云DAC数字资产创意平台锁住美好&#xff0c;用数字艺术的形式制作专属节日记忆&#xff0c;有创意的礼物总让人难忘。 独一无二的礼物—…

qt生成无ui界面动态库,有ui界面的动态库,以及含有资源文件和qss文件的动态库

提要 此文分别就qt生成纯代码的动态库&#xff0c;含有ui文件的动态库以及含有资源文件qss文件和切图的动态库。 实现 1.纯代码的生成qt库。即没有ui文件的项目。 打开QtCreate&#xff0c;新建文件&#xff0c;选择library. 接下来填写项目的名称&#xff0c;选择生成的路…

太形象了!什么是边缘计算?最有趣的解释没有之一!

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;云计算就像是天上的云&#xff0c;看得见摸不着&#xff0c;像章鱼的大脑&#xff0c;…

qt中使窗口的大小随窗口的内容大小进行调整

提要 窗口用于显示文本信息&#xff0c;当窗口的文本信息变长&#xff0c;原有窗口的大小不足以显示文本信息。这时就需要一个能够根据窗口要显示的文本信息的长度来调整窗口大小的窗口。 示例 效果图&#xff1a; 窗口内容少的时候提示窗口大小&#xff0c;当窗口要显示的…

看完这篇买车不用坐引擎盖哭啦

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;Kying转自&#xff1a;数据森麟作者介绍&#xff1a;Kying&#xff0…

什么是云计算基础设施? | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;云计算基础设施是内部系统和公共云之间的软件和硬件层&#xff0c;其融合了许多不同的…

如何将本地代码推送至远程仓库_命令简化版本

如何将本地代码推送至远程仓库&#xff1f; 文章目录一、新仓库1. 初始化README.md2. 初始化Git仓库3. 将工作区的代码添加至暂存区4. 将暂存区的变更文件提交到本地仓库5. 将本地仓库和远程仓库建立连接6. 将本地代码push至远程仓库7. 先拉去代码&#xff0c;在push8. 强制推送…

K8S精华问答 | Kubernetes用的是Docker的容器?

kubernetes&#xff0c;简称K8s&#xff0c;是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;目标是让部署容器化的应用简单并且高,并提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c;维护的一种机制。今天&#xff0c;我们就来看看…