Я написал функцию для сохранения структуры каталогов в json файл. Я использую Jsoncpp libary для кодирования json. И я использую c ++ 17. Но он выдает Json::LogicError
. Он говорит, что «Json::Value::operator[](ArrayIndex)
требует arrayValue». Вот функция:
void ScanFolder(string path)
{
CTYPE::PFILELIST pfl;
pfl=CTYPE::to(DIRVIEW::LoadDir(path));
JSONFILE::Encode(DIRVIEW::AddPath(path,"fconfig.json"),pfl);
for(const auto&ele : pfl.data)
if(ele.type=="Folder")
ScanFolder(DIRVIEW::AddPath(pfl.current,ele.filename));
return;
}
CTYPE
, DIRVIEW
и JSONFILE
- это пространства имен, определенные мной. Вот функция Encode
:
namespace JSONFILE
{
void Encode(string filepath,CTYPE::PFILELIST data)
{
Json::StyledWriter writer;
Json::Value arr,obj;
fstream out;
arr["Current_Folder"]=data.current;
int i=0;
for(const auto&ele : data.data)
{
arr["Files"][i]=ele.filename;
obj["Type"]=ele.type;
obj["Icon"]=ele.icon;
arr[ele.filename]=obj;
i++;
}
string jsonstr=writer.write(arr);
out.open(filepath.c_str(),ios::binary|ios::out|ios::trunc);
if(out.is_open())
out<<jsonstr<<endl;
else
return;
return;
}
};
Я обнаружил, что код, вызвавший ошибку, arr[ele.filename]=obj;
. Когда я его удалил, код работает. Я проверил значение ele.filename
, это не пустая переменная и оно имеет правильное значение, например «filename.txt». Что мне делать, чтобы это исправить?