请问老师我用如下两个库导入,需要读取外部Json文件,在cpp文件是没有报错的,但是编译就报错: No such file or directory。请问是在这里需要专门的MDL相关的读取函数吗
#include <json/json.h>#include "jsoncpp.cpp"
在MDL的头文件中有一个BeJsonUtilities.h,你将您的json文件夹复制到MDL的include文件夹下,然后在cpp中引入这个BeJsonUtilities.h应该就能工作了。
#include <BeJsonCpp\BeJsonUtilities.h>
老师引用这个头文件并删除json/json.h,Json::Reader和Json::Value不能用,编译器还是报错无法打开包括文件: “json/json.h”。
然后我把json/json.h加上,cpp中没有错,编译器还是报无法打开包括文件: “json/json.h”的错误
确实,这个JsonValueR应该改成如下行就能编译通过了。不过编译通过后连接又出错了,还得需要一个未公开的库文件BeJson.lib。所以,这个路子不太行。
Json::Value root;
还是采用第三方开源的JsonCPP库吧。我下载并改造过如下:
jsoncpp.7z
将该压缩包解压到你的MDL源代码文件夹下,然后在cpp中写如下包含语句:
#include <fstream> #include <Mstn\MdlApi\MdlApi.h> #include <Mstn\ISessionMgr.h> #include <Mstn\MdlApi\msdialog.fdf> #include "jsoncpp/json/json.h"
下面是我的cpp中读写Json的两个函数:
/*----------------------------------------------------+ | writeJsonFile +----------------------------------------------------*/ void writeJsonFile(WCharCP wFullFileName, Json::Value& value) { char fullFileName[256]; mdlCnv_convertUnicodeToMultibyte(wFullFileName, -1, fullFileName, 256); std::ofstream ofs; ofs.open(fullFileName); assert(ofs.is_open()); Json::StreamWriterBuilder builder; std::unique_ptr<Json::StreamWriter> const sWriter(builder.newStreamWriter()); sWriter->write(value, &ofs); ofs.close(); } /*----------------------------------------------------+ | readJsonFile +----------------------------------------------------*/ void readJsonFile(Json::Value& root, WStringCR wFullFileName) { char fullFileName[256]; mdlCnv_convertUnicodeToMultibyte(wFullFileName.GetWCharCP(), -1, fullFileName, 256); std::ifstream ifs; ifs.open(fullFileName); Json::Reader reader; reader.parse(ifs, root, false); ifs.close(); }
好的,谢谢老师!那我调用这个写文件函数可以这样用吗
string x= "C:/hh.json"; WStringCR wFullFileName = WString::WString(x.c_str()); Json::Value root; readJsonFile(root, wFullFileName);
不对不对是读文件
可以简化成:
WString wFullFileName {L"C:\\hh.json"}; //C++11推荐的初始化对象的方法 Json::Value root; readJsonFile(root, wFullFileName);
老师还是有问题,这个头文件不报错,但是编译的时候还是无法打开包括文件: “json/json.h”,我已经把jsoncpp文件目录包含在项目里面了