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;
};
生命依靠吸收负熵,避免了趋向平衡的衰退

浙公网安备 33010602011771号