c++使用CJsonObject读取json文件

c++代码实现读取当前文件是否有json文件,用于是实现3D模型3层融合的单独配置文件

#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;
}

aisp_3d.json

{ 
    "model_name": "aisp_3d",
    "format_change":[
  
    {"layer_name": "layer_69_QuantizeFeature_","data_format":"NC32_IN_NHWC_OUT"},
    {"layer_name": "layer_67_QuantizeFeature_","data_format":"NHWC_IN_NC32_OUT"},
    {"layer_name": "layer_63_QuantizeFeature_","data_format":"NC32_IN_NHWC_OUT"},
    {"layer_name": "layer_79_QuantizeFeature_","data_format":"NHWC_IN_NC32_OUT"},
    {"layer_name": "layer_75_QuantizeFeature_","data_format":"NC32_IN_NHWC_OUT"},
    {"layer_name": "layer_81_QuantizeFeature_","data_format":"NC32_IN_NHWC_OUT"},
    {"layer_name": "layer_40_QuantizeFeature_","data_format":"NC32_IN_NHWC_OUT"},
    {"layer_name": "layer_21_QuantizeFeature","data_format":"NC32_IN_NHWC_OUT"},
    {"layer_name": "layer_2_QuantizeFeature","data_format":"NC32_IN_NHWC_OUT"}
    ],  
        "node_name_":[
        {"node" : "layer_63_QuantizeFeature_"},
        {"node" : "layer_69_QuantizeFeature_"},
        {"node" : "layer_75_QuantizeFeature_"},
        {"node" : "layer_81_QuantizeFeature_"}
    ]   
} 

CMakeList.txt

file(GLOB CURRENT_SOURCE_PATH ${CMAKE_CURRENT_LIST_DIR}/*.cc
  ${CMAKE_CURRENT_LIST_DIR}/format_inference/*.cc)
file(GLOB CURRENT_HEAD_PATH ${CMAKE_CURRENT_LIST_DIR}/*.h
  ${CMAKE_CURRENT_LIST_DIR}/format_inference/*.h)

set(LIB_NAME mtt_optimize_serial)
add_library(${LIB_NAME} OBJECT ${CURRENT_SOURCE_PATH})
target_include_directories(${LIB_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/)
link_libraries(-lstdc++fs)
list(APPEND MAGIK_TRANSFORMKIT_OBJECTS $<TARGET_OBJECTS:${LIB_NAME}>)
list(APPEND MONOLITH_TOOLS_TARGETS ${LIB_NAME})

简单化版

std::function<bool()> readJson = [&node]() {                                                                                                                                                                       
    std::ifstream file("format.json");
    if (file.good()) {
        std::ostringstream output;
        output << file.rdbuf();
        std::string outputStr = output.str();
        
        neb::CJsonObject picObj;
        if (!picObj.Parse(outputStr)) {
            VLOGEC(MagikModuleType::MAGIK_SERIALIZE, ErrorCodeType::MAGIK_CODE_FAILED_OPEN_FILE)
                << "Invalid format json";
        }
        if (picObj.KeyExist("model_name")) {
            std::string model_name;
            picObj.Get("model_name", model_name);
            if (model_name.substr(0, 7) != "aisp_3d") {
                return false;
            }
        }
        std::string format_key = "data_fmt";
        neb::CJsonObject tmpObj;
        if (picObj.KeyExist(format_key)) {
            picObj.Get(format_key, tmpObj);
            std::string name = node->name();
            if (tmpObj.KeyExist(name)) {
                std::string data_fmt_str;
                tmpObj.Get(name, data_fmt_str);
                if (data_fmt_str == "NHWC_IN_NC32_OUT") {
                    return true;
                }
            }
        }
    }   
    return false;
};      

posted @ 2023-11-27 11:14  WEIWEI1095  阅读(54)  评论(0)    收藏  举报
*/
作品集 //