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

代码:

cpp 复制代码
// 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");
}

输出结果:

相关推荐
我的xiaodoujiao2 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 38--Allure 测试报告
python·学习·测试工具·pytest
好奇龙猫8 小时前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
saoys8 小时前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
电子小白1239 小时前
第13期PCB layout工程师初级培训-1-EDA软件的通用设置
笔记·嵌入式硬件·学习·pcb·layout
唯情于酒10 小时前
Docker学习
学习·docker·容器
charlie11451419111 小时前
嵌入式现代C++教程: 构造函数优化:初始化列表 vs 成员赋值
开发语言·c++·笔记·学习·嵌入式·现代c++
IT=>小脑虎11 小时前
C++零基础衔接进阶知识点【详解版】
开发语言·c++·学习
#眼镜&12 小时前
嵌入式学习之路2
学习
码农小韩12 小时前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法
微露清风12 小时前
系统性学习C++-第十九讲-unordered_map 和 unordered_set 的使用
开发语言·c++·学习