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


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

  • 相关阅读:
    模拟Linux修改实际、有效和保存设置标识
    ubuntu中桌面图标的配置
    硬盘安装ubuntu
    关于NumPy
    关于Spring JavaWeb工程中的ContextRefreshedEvent事件
    MySQL中Index Merge简介
    InetlliJ IDEA的快捷键及各种配置
    Java语言中的正则表达式
    Git使用笔记
    linux中添加常用应用程序的桌面图标
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4884790.html
Copyright © 2020-2023  润新知