zoukankan      html  css  js  c++  java
  • jsonCPP

    jsoncpp是一个用于操作json数据的C++开源库
    代码地址:https://github.com/open-source-parsers/jsoncpp
    使用文档:http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html

    使用过程中遇到一个错误,这里作为记录

    错误

    error C4996: 'Json::Reader': Use CharReader and CharReaderBuilder instead
    error C4996: 'Json::Reader::Reader': Use CharReader and CharReaderBuilder instead
    

    解决方法

    Json::CharReaderBuilder readerBuild;
    Json::CharReader* reader(readerBuild.newCharReader());
    

    示例

    
    #include <iostream>
    #include "json/json.h"
    
    
    int main()
    {
    	std::cout << "Hello world" << std::endl;
    
    	const char* strValue = "{"file_path": "./test_models/test.obj", "filename":"test.obj", "code_id": 3 }";
    	Json::CharReaderBuilder readerBuild;
    	Json::CharReader* jsonReader(readerBuild.newCharReader());
    	Json::Value jsonValue;
    	JSONCPP_STRING jsonErrs;
    	bool isParse = jsonReader->parse(strValue, strValue + std::strlen(strValue), &jsonValue, &jsonErrs);
    	if (isParse && 0 == jsonErrs.size()){
    		std::string filePath = jsonValue["file_path"].asString();
    		std::string fileName = jsonValue["filename"].asString();
    		int codeId = jsonValue["code_id"].asInt();
    		std::cout << "filePath: " << filePath << " fileName: " << fileName << " codeId: " << codeId << std::endl;
    	}
    	
    	return 0;
    }
    

    解析服务端返回的json数据

    
    void stringReplace(std::string& strOri, const std::string& strsrc, const std::string& strdst) {
    	std::string::size_type pos = 0;
    	std::string::size_type srclen = strsrc.size();
    	std::string::size_type dstlen = strdst.size();
    
    	while ((pos = strOri.find(strsrc, pos)) != std::string::npos) {
    		strOri.replace(pos, srclen, strdst);
    		pos += dstlen;
    	}
    }
    
    bool parseResult(std::string & predictRes, std::vector<int> & labels){            
            // parse result
            stringReplace(predictRes, "\"", """);
            predictRes = std::string(predictRes, 1, predictRes.size() - 2);
            Json::CharReaderBuilder readerBuild;
            Json::CharReader* reader(readerBuild.newCharReader());
    	Json::Value rcvRes;
    	JSONCPP_STRING jsonErrs;
    	bool parseOK = reader->parse(predictRes.c_str(), predictRes.c_str() + predictRes.size(), &rcvRes, &jsonErrs);
    
    	delete reader;
    	if (!parseOK) {
    		//std::cout << "Failed to parse the rcvRes!" << std::endl;
    		return false;
    	}
    
    	std::string returnCode = rcvRes["returnCode"].asString();  // "Successed!" or "Failed!"
    	if (returnCode != "Successed!") {
    		//std::cout << "Predict is Failed" << std::endl;
    		return false;
    	}
    
    	// get labels
    	labels.clear();
    	Json::Value rcvResItem;
    	int rcvSize = rcvRes["text"][0].size();
    	for (int i = 0; i < rcvSize; ++i) {
    		rcvResItem = rcvRes["text"][0][i];
    		int label = rcvResItem.asInt();
    		labels.push_back(label);
    	}
    }
    
  • 相关阅读:
    老板说,你给我1分钟内下载100张图片!So,easy!
    测试用例 setup 和 和 teardown
    pytest环境准备与入门
    测试工程需要明白的Monkey测试
    5.通过定位实现二级菜单
    4.CSS中float导致的高度坍塌问题及解决方法
    3.使用float实现文字环绕图片
    2.reset.css文件
    1.图片元素<img>和<map>的联用
    1.引用js文件中的函数调用
  • 原文地址:https://www.cnblogs.com/xiaxuexiaoab/p/14574884.html
Copyright © 2011-2022 走看看