zoukankan      html  css  js  c++  java
  • cocos2dx 3.2 定义自己使用rapidjson阅读json数据

    一、说明

    我在这里得到的只是一个简单的定义string和Int种类,其他数据类型可以被替换向上。

    两、头文件

    class JsonReadUtils
    {
    public:
    	static JsonReadUtils* getInstance();
    	const std::string getStringFromeFile(const std::string &fileName);
    	const std::string getStringFromeJson(const std::string jsonStr,const std::string key);
    	const std::string getStringFromeJson(const std::string jsonStr,const std::string key1,const std::string key2);
    	int getIntFromeJson(const std::string jsonStr,const std::string key);
    	int getIntFromeJson(const std::string jsonStr,const std::string key1,const std::string key2);
    	unsigned getSizeFromeJsonArr(const std::string jsonArr);
    	JsonReadUtils();
    private:
    	
    	~JsonReadUtils(void);
    };


    三、源文件

    #include "JsonUtils.h"
    
    #define RETURN_IF(cond,p)           if((cond)) return (p)
    
    static JsonReadUtils* mUtils = nullptr;
    JsonReadUtils::JsonReadUtils()
    {
    
    }
    
    JsonReadUtils::~JsonReadUtils(void)
    {
    	CC_SAFE_DELETE(mUtils);
    }
    
    JsonReadUtils* JsonReadUtils::getInstance()
    {
    	if (NULL==mUtils)
    	{
    		mUtils = new JsonReadUtils();
    	}
    	return mUtils;
    }
    
    const std::string JsonReadUtils::getStringFromeFile( const std::string &fileName)
    {
    	const std::string mstr = cocos2d::FileUtils::getInstance()->getStringFromFile(fileName);
    	return mstr;
    }
    const std::string JsonReadUtils::getStringFromeJson( const std::string jsonStr,const std::string key )
    {
    	rapidjson::Document _mDoc;
    	std::string mstr = jsonStr;
    
    	RETURN_IF(NULL==mstr.c_str()||!mstr.compare(""),"");
    	_mDoc.Parse<rapidjson::kParseDefaultFlags>(mstr.c_str());
    	RETURN_IF(_mDoc.HasParseError()||!_mDoc.IsObject()||!_mDoc.HasMember(key.c_str()),"");
    	const rapidjson::Value &pArr = _mDoc[key.c_str()];
    	RETURN_IF(!pArr.IsString(),"");
    	const std::string mm = pArr.GetString();
    	return mm;
    }
    
    const std::string JsonReadUtils::getStringFromeJson( const std::string jsonStr,const std::string key1,const std::string key2 )
    {
    	rapidjson::Document _mDoc;
    	std::string mstr = jsonStr;
    	RETURN_IF(NULL==mstr.c_str()||!mstr.compare(""),"");
    	_mDoc.Parse<rapidjson::kParseDefaultFlags>(mstr.c_str());
    	RETURN_IF(_mDoc.HasParseError()||!_mDoc.IsObject()||!_mDoc.HasMember(key1.c_str()),"");
    	const rapidjson::Value &pArr = _mDoc[key1.c_str()];
    	RETURN_IF(!pArr.IsObject(),"");
    	const rapidjson::Value &p = pArr[key2.c_str()];
    	RETURN_IF(!p.IsString(),"");
    	const std::string vvv =p.GetString();
    	return vvv;
    }
    
    int JsonReadUtils::getIntFromeJson( const std::string jsonStr,const std::string key )
    {
    	rapidjson::Document _mDoc;
    	std::string mstr = jsonStr;
    	RETURN_IF(NULL==mstr.c_str()||!mstr.compare(""),NULL);
    	_mDoc.Parse<rapidjson::kParseDefaultFlags>(mstr.c_str());
    	RETURN_IF(_mDoc.HasParseError()||!_mDoc.IsObject()||!_mDoc.HasMember(key.c_str()),NULL);
    	const rapidjson::Value &pArr = _mDoc[key.c_str()];
    	RETURN_IF(!pArr.IsInt(),NULL);
    	int mm = pArr.GetInt();
    	return mm;
    }
    
    int JsonReadUtils::getIntFromeJson( const std::string jsonStr,const std::string key1,const std::string key2 )
    {
    	rapidjson::Document _mDoc;
    	std::string mstr = jsonStr;
    	RETURN_IF(NULL==mstr.c_str()||!mstr.compare(""),NULL);
    	_mDoc.Parse<rapidjson::kParseDefaultFlags>(mstr.c_str());
    	RETURN_IF(_mDoc.HasParseError()||!_mDoc.IsObject()||!_mDoc.HasMember(key1.c_str()),NULL);
    	const rapidjson::Value &pArr = _mDoc[key1.c_str()];
    	RETURN_IF(!pArr.IsObject(),NULL);
    	const rapidjson::Value &p = pArr[key2.c_str()];
    	RETURN_IF(!p.IsInt(),NULL);
    	int vvv =p.GetInt();
    	return vvv;
    }
    
    unsigned JsonReadUtils::getSizeFromeJsonArr( const std::string jsonArr )
    {
    	rapidjson::Document _mDoc;
    	std::string mstr = jsonArr;
    
    	RETURN_IF(NULL==mstr.c_str()||!mstr.compare(""),NULL);
    	_mDoc.Parse<rapidjson::kParseDefaultFlags>(mstr.c_str());
    	RETURN_IF(_mDoc.HasParseError()||!_mDoc.IsObject(),NULL);
    	const rapidjson::Value &mValue = _mDoc;
    	RETURN_IF(!mValue.IsArray(),NULL);
    	unsigned count = 0;	
    	unsigned mm = mValue.Capacity();
    	return mm;
    }


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Vue路由机制
    谷歌浏览器打不开应用商店的解决方法
    Vue报错——Component template should contain exactly one root element. If you are using vif on multiple elements, use velseif to chain them instead.
    Vue.js学习之——安装
    Vue使用axios无法读取data的解决办法
    关于localstorage存储JSON对象的问题
    2013年整体计划
    个人喜欢的警语收集
    Linux防火墙的关闭和开启
    Flex修改title 转载
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4884790.html
Copyright © 2011-2022 走看看