c++使用CJsonObject读取json文件

发布时间 2023-11-27 11:15:59作者: WEIWEI1095
#include <experimental/filesystem>         
#include "core/utils/cjson/CJsonObject.hpp" 
#include <fstream>         

int main(){
    std::map<std::string,std::string> jsonLayerName;
    std::vector<std::string> target_name;
    target_name.push_back("aisp_3d.json");
    std::function<bool(int)> readJson =[&jsonLayerName,&target_name](int index){
        namespace fs = std::experimental::filesystem;
        std::string jsonFilePath;
        bool json_flag = false;
        fs::path currentPath = fs:: current_path();
        std::string file_extension = ".json";
        for (const auto& entry : fs::directory_iterator(currentPath)) {
            if (entry.path().extension() == file_extension) {
                jsonFilePath = std::move(entry.path());
                json_flag = true;
                break;
            }
        }
        if(!json_flag)
            return false;
        ifstream infile;
        infile.open(jsonFilePath.data());
        assert(infile.is_open());
        std::string str_tmp;
        char c;
        while (!infile.eof())
        {
            infile >> c;
            str_tmp += c;
        }
        infile.close();
        neb::CJsonObject oJson(str_tmp);
        std::string model_name;
        oJson.Get("model_name",model_name);
        for (int i =0;i<oJson["format_change"].GetArraySize();i++){
            std::string layer_name;
            std::string data_format;
            oJson["format_change"][i].Get("layer_name",layer_name);
            oJson["format_change"][i].Get("data_format",data_format);
            jsonLayerName.insert(pair<std::string,std::string>(layer_name,data_format));
        }
        fs::path pathObj(jsonFilePath);
        return pathObj.filename().string() == target_name[index];
    };
    if(readJson(0)){
        for(const auto& node_name : jsonLayerName){
            if(node->name() == node_name.first){
                if(node_name.second == "NC32_IN_NHWC_OUT")
                    return NC32_IN_NHWC_OUT;
                if(node_name.second == "NHWC_IN_NC32_OUT")
                    return NHWC_IN_NC32_OUT;
                if(node_name.second == "NC32_IN_NC32_OUT")
                    return NC32_IN_NC32_OUT;
                if(node_name.second == "NHWC_IN_NHWC_OUT")
                    return NHWC_IN_NHWC_OUT;
            }
        }
    }
 std::cout << "Current path: " << currentPath << std::endl;

  return 0;
}