引言

之前将变量保存并在本地生成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文件相关推荐

  1. python读取中文文件乱码-详解Python的json文件读取及中文乱码显示问题解决方法...

    Python的json文件读取及解决中文乱码显示问题 本文实例讲述了Python实现的json文件读取及中文乱码显示问题解决方法.分享给大家供大家参考,具体如下: city.json文件的内容如下: ...

  2. python json.loads()中文问题-Python实现的json文件读取及中文乱码显示问题解决方法...

    本文实例讲述了Python实现的json文件读取及中文乱码显示问题解决方法.分享给大家供大家参考,具体如下: city.json文件的内容如下: { "cities": [ { & ...

  3. qt中生成含有中文的json文件和解析json文件

    提要 生成的json文件在程序加载解析时出现上述错误,究其原因是生成json文件过程中编码问题.qt编译器默认的编码格式为utf-8,而windows一般为gbk编码,所以就需要在生成本地json文件 ...

  4. QT中生成字符串md5的方法

    QT中,提供了QCryptographicHash类,很方便的实现的字符串到md5/md4/sha1的转换, 可以通过两种方法实现: [cpp] view plain copy QString pwd ...

  5. python获取mysql中的数据供js调用_python 读取mysql数据至csv文件中,并发送邮件

    test 代码: #coding:utf-8 ''' Created on 2019年2月18日 @author: Administrator ''' import ConfigParser impo ...

  6. Flash读取XML文件出现的中文乱码问题 flash读取外部中文时显示乱码的问题

    Flash读取XML文件出现的中文乱码问题    原因:中文乱码,不用说都是编码惹的祸.Flash是使用UTF-8编码的.而一般我们保存文本文件时(也就是XML文件),用的编码是GB2321.ANSI ...

  7. 读取ANSYS结果文件中的数据C语言,Ansys后处理读取非默认的结果文件数据 | 坐倚北风...

    在进行后处理时,Ansys默认读取当前目录下的默认求解结果文件.Ansys的求解结果文件有以下几种: (1).RST – 结构分析或耦合场分析结果: (2).RTH – 热分析和扩散分析结果: (3) ...

  8. python文件读取下一个字符_python文件的读写总结

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  9. python文件读取与输出_python基本文件操作(文件输入和输出)

    文件输入输出中常用的文件对象方法: open: 返回一个新的文件对象,调用该对象的上的方法可对文件进行任何操作 readline: 读取一行数据包括结尾的换行符在内 write: 将数据写入文件中 c ...

最新文章

  1. Django博客系统注册(定义用户模型类)
  2. 千万级饿了么交易系统架构 5 年演化史!
  3. Android 64K解决办法
  4. 实战SSM_O2O商铺_09【商铺注册】DTO之ShopExecution的实现
  5. MCPlayerKit 0.0.6 Release
  6. 哲学家就餐(避免死锁)(多进程版)
  7. Replication--查看未分发命令和预估所需时间
  8. LeetCode 891. 子序列宽度之和(数学)
  9. 【吃炸弹的鸽子UVA10765-双联通模板】
  10. ceph搭建_【实战演练】基于各种存储模拟器与软件存储的存储实验07-Ceph分布式存储的3种存储类型使用方法...
  11. 好友管理系统--python
  12. VB串口通信技术资料:媒体/源码/论文/书籍/视频/控件/程序
  13. 【自制壁纸生成器】2022新年壁纸领取,换一张手机壁纸,迎接2022叭~
  14. 华为5G手机回归,再次打破国外技术垄断,将价格推至新高度
  15. 怎么用计算机自己做动画片,大师为你详解动画怎么制作
  16. 安装RedHat Linux 7.4
  17. Trigger与Flip-Flop两种‘触发器’的区别
  18. Zookeeper-3.4.5安装步骤及异常处理
  19. python json 转csv_利用python将json数据转换为csv格式的方法
  20. 儿童python培训班哪家

热门文章

  1. 限免下载!揭秘你不知道的计算机“进化论”
  2. 亿级规模的 Feed 流系统,如何轻松设计?
  3. ESS控制台发布新功能:创建多实例规格的伸缩配置
  4. 承担集团数万应用、研发人员日常工作,阿里持续交付平台的设计、迭代之道... 1
  5. “低代码”将干掉 70% 的软件开发工作
  6. 重磅来袭 | 移动云城市峰会分论坛暨移动云TeaTalk青岛站 即将开启
  7. Cloudera完善企业数据云愿景,新品进一步扩展无处不在的云体验
  8. 我和面试官之间关于操作系统的一场对弈 | 原力计划
  9. 崩管嵌入式还是单片机,盘就完事了
  10. 华为正准备发布属于自己的手机操作系统;腾讯已经交出了首张产业互联网成绩单……...