jsoncpp学习

1.环境配置 

C++ 操作 (读写)json 文件及jsoncpp的配置-CSDN博客

一步步跟下来,就可以了!!!

2.遇到的问题:

读取json文件,出现中文乱码!!!

参考:C++ ifstream open 读取txt/json文件出现中文乱码的解决问题-CSDN博客

这篇文章讲的很好!真心建议学习!!!

(1)ANSI编码的txt文件的读取。没有乱码

(2)转存为UTF-8的txt文件的读取,出现中文乱码

这时候需要进行一些处理!!!(相关代码看上面这篇文章的即可)

3.示例:正确读取含有中文的json文件

demo.json

 

代码:

// json.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

#include <iostream>
#include <fstream>
#include "json.h"
#include "direct.h"
#include <assert.h>
#include <string>
#include <Windows.h>
using namespace std;
string UTF8ToGB(const char* str)
{
	string result;
	WCHAR* strSrc;
	LPSTR szRes;

	//获得临时变量的大小
	int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
	strSrc = new WCHAR[i + 1];
	MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);

	//获得临时变量的大小
	i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
	szRes = new CHAR[i + 1];
	WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);

	result = szRes;
	delete[]strSrc;
	delete[]szRes;

	return result;
}

std::string readFile(std::string file)
{
	std::ifstream infile;
	infile.open(file.data());   //将文件流对象与文件连接起来 
	assert(infile.is_open());   //若失败,则输出错误消息,并终止程序运行 

	string s; string strAllLine;
	while (getline(infile, s)) {
		string line = UTF8ToGB(s.c_str()).c_str();
		strAllLine += line;
	}
	infile.close();             //关闭文件输入流 
	return strAllLine;
}
void readStrJson()
{
	string str = readFile("./demo.json");
	cout << str << '\n';
	//声明类的对象
	Json::Reader reader;
	Json::Value root;

	//从字符串中读取数据  
	if (reader.parse(str, root))
	{
		std::string name = root["name"].asString();
		cout << name << endl;
	}
}

int main()
{
	readStrJson();
	system("pause");
}

输出结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

产品经理须知 | 电商API接口接入知识小结

应用程序接口API&#xff08;Application Programming Interface&#xff09;&#xff0c;是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统&#xff08;中后台系统&#xff09;或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

uni-app的学习【第二节】

四 路由配置及页面跳转 (1)路由配置 uni-app页面路由全部交给框架统一管理,需要在pages.json里配置每个路由页面的路径以及页面样式(类似小程序在app.json中配置页面路由) (2)路由跳转 uni-app有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳…

JavaWeb- Tomcat

一、概念 老规矩&#xff0c;先看维基百科&#xff1a;Apache Tomcat (called "Tomcat" for short) is a free and open-source implementation of the Jakarta Servlet, Jakarta Expression Language, and WebSocket technologies.[2] It provides a "pure Ja…

能赚钱的GPT Store正式上线!如何将自己的 GPT 放到商店中?

等了两个月&#xff0c;OpenAI 的 GPT Store 今日凌晨终于上线&#xff01;上线 GPT Store 的同时&#xff0c;OpenAI 同步了最新的 GPTs 数据&#xff1a;截止到1月11日&#xff0c;用户已创建300万的GPTs&#xff01; GPTs 开发者可以通过 GPTs 来获利。OpenAI 将在今年第一季…

使用递归将list转换成tree

在产品研发时遇到这样一个问题&#xff0c;对于省市区县这类三级联动的数据&#xff0c;前端插件需要一次把数据全部返回&#xff0c;单纯的使用接口查询字节的没办法满足要求。 如果一次把数据全部返回&#xff0c;前端使用起来很麻烦需要一条一条的进行查找。 常规的使用方…

使用visio画图基础(更新中)

1、画基本图形&#xff1a;正方形长方形&#xff0c;直线虚线 1、在形状这里选中后出现基本形状界面&#xff0c;拖动即可 画直线、虚线修改直线的样式改为虚线即可。 2、在矩形中画网格 先画一个矩形&#xff0c;然后选中&#xff0c;按照箭头选择排列形状。设置3*3。 双击可…

ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式

ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式 前提docker环境已经安装好 如未安装&#xff0c;请参考博文https://blog.csdn.net/a554521655/article/details/134251763 文章目录 ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式安装emqx查看是否安装并启动成功登录前端查 安…

凸优化Convex Optimization期末复习重点和考试笔记(二)凸优化+对偶

接博客【凸优化Convex Optimization期末复习重点和考试笔记&#xff08;一&#xff09;凸集凸函数】 第三部分&#xff1a;凸优化 第四部分&#xff1a;对偶 几种典型的凸函数 以上就是凸优化和对偶函数部分&#xff0c;以及几种常见的凸函数。我们就考到这所以后面的没有整理…

进销存+小程序商城:实现批发零售企业的互联网转型与管理升级

在当今互联网高速发展的时代&#xff0c;越来越多的批发零售企业开始开始考虑转型。在这个行业中&#xff0c;企业要想取得更好的发展&#xff0c;就要积极地拥抱互联网。专属的订货商城小程序是企业转型的第一步。通过将进销存与订货商城一体化&#xff0c;企业可以更好地满足…

Java项目:117SpringBoot动漫论坛网站

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 117SpringBoot动漫论坛网站 一、项目介绍 动漫论坛网站是由SpringBootMybatis开发的&#xff0c;旅游网站分为前台和后台&#xff0c;前台为用户浏览&#xff0c;后台进…

大小论文over,坐等毕业。写点ROS上建图与导航的心得,也不知道对错,欢迎讨论~(对,谨慎阅读,不存在误人子弟哈~.~)

大小论文总算是都搞定了&#xff0c;院审过了送外审了&#xff0c;生死有命富贵在天&#xff0c;希望外审专家大佬们高抬贵手o.O~ 我所理解的建图算法的移植&#xff0c;能不能运行起来&#xff0c;大框架上就是把一棵完整的坐标转换关系的TF树给整理“通顺”&#xff0c;TF&am…

springboot3(二、StreamAPI)

文章目录 一、StreamAPI1.介绍2.代码示例 二、基本用法1.创建流2.流并发3.流并发问题 三、流方法1.中间操作2.终止操作 一、StreamAPI StreamAPI这种函数式编程是声明式编程&#xff0c;声明式编程是一种编程范式&#xff0c;它着重于描述问题的"是什么"&#xff0c…

深入理解.NET框架中的CLR(公共语言运行时)

深入理解.NET框架中的CLR&#xff08;公共语言运行时&#xff09; 引言 .NET框架中的CLR&#xff08;公共语言运行时&#xff09;是.NET应用程序运行的核心。本文将继续探索CLR的核心功能&#xff0c;并详细介绍.NET程序启动时是如何自动加载关键的库和服务来提供这些功能的。…

初识QT。

文章目录 前言一、QWidget1、了解内容main文件中的基本内容。.pro项目文件的内容。mywidget.h文件内容。命名规范和快捷键Qt助手 2、button按钮3、对象树4、信号和槽5、自定义信号和槽函数拓展 6、Lambda表达式7、练习 二、QMainWindow1、菜单栏和菜单项2、工具栏3、状态栏4、铆…

适用于安防 音响 车载等产品中中的音频接口选型分析

在人工智能兴起之后&#xff0c;安防市场就成为了其全球最大的市场&#xff0c;也是成功落地的最主要场景之一。对于安防应用而言&#xff0c;智慧摄像头、智慧交通、智慧城市等概念的不断涌现&#xff0c;对于芯片产业催生出海量需求。今天&#xff0c;我将为大家梳理GLOBALCH…

启用Hyper-V的三种方法,总有一种适合你

想在Windows 10计算机上的虚拟机中安装并运行Linux或更早版本的Windows操作系统吗&#xff1f;你将很高兴知道&#xff0c;你不需要第三方虚拟化软件&#xff08;如VirtualBox&#xff09;来在Windows 10上安装和运行Linux和Windows。 Windows 10中的内置Hyper-V工具允许你创建…

Android Studio 实现飞机大战游戏App

&#x1f345;文章末尾有获取完整项目源码方式&#x1f345; 目录 前言 一、运行演示 二、开发环境 三、完成步骤 步骤 1&#xff1a;创建项目 步骤 2&#xff1a;创建包名 步骤 3&#xff1a;实现启动页 步骤 5&#xff1a;实现用户注册 步骤 6&#xff1a;实现用户登…

逃离支原体又陷入流感 | 揭秘呼吸道感染与肠道菌群的隐秘关联

谷禾健康 成人每年大约会患上两到三次普通感冒&#xff0c;儿童每年可能会患上多达八次。而今年尤为显著&#xff0c;各大医院的儿科还是爆满状态&#xff0c;甚至是一号难求。 肺炎支原体感染还没彻底过去&#xff0c;紧接着流感和其他呼吸道病原体感染又跟来了&#xff0c;医…

ffmpeg写YUV420文件碰到阶梯型横线或者条纹状画面的原因和解决办法

版权声明&#xff1a;本文为CSDN博主「文三~」的原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载请附上原文出处链接及本声明。 原文链接&#xff1a;https://blog.csdn.net/asdasfdgdhh/article/details/112831581 留作备份 阶梯型横线&#xff1a; 条纹状画面…

vue前端开发自学,父子组件之间的数据传递demo

vue前端开发自学,父子组件之间的数据传递demo!下面为大家展示的是&#xff0c;vue开发中常见的&#xff0c;父子级别关系的&#xff0c;数据 传递案例。先给大家看一下&#xff0c;源码&#xff0c;然后讲解一下里面的注意事项。 <template><h3>Parent</h3>…
最新文章