【C++】nlohmann json包读取json文件异常的错误。

场景

使用vs2017。使用nlohmann的json包对json进行读写操作。导入json.hpp后,能在代码中进行字符串与json对象的相互转换。也能输出json文件。但是在读取我自己编写的json文件时,总是在格式转换的过程中出现“out of range”的error。

解决方案

  1. nlohmann-json读取json文件的一般步骤:
	std::ifstream read("broker.json");
	json in = json::parse(read);
	cout << in.dump(4) << endl;
  1. 若目标json文件中包含中文字符,则需要对json文件进行转码。用UltraEdit转为UTF-8(带BOM或不带)。
  2. 更改后能正常读取json文件。
  3. 但是在命令行中却显示中文乱码。关于乱码这个问题后来又看了些nlohmann在github的回答,大致是这样的,nlohmann json只支持UTF-8,支持中文,而windows系统是UTF-16,这里就会有个编码格式不一致的问题。基本上很多这类的问题都是出现在MSVS里。一种情况是,c++的cpp文件本身不是UTF-8编码的,导致即时文件里写的是中文,但因编码非UTF-8而失败错误。另外一种情况是,控制台本身显示的编码问题,默认是936也就是GBK编码。可以通过命令chcp 65001设置为UTF-8,chcp 936设置回来。

https://github.com/nlohmann/json/issues/1022

你可能感兴趣的:(C++,错误处理)