void InputLayer::readJson()
{
rapidjson::Document _doc;
bool bRet = false;
ssize_t size = 0;
unsigned char *pBytes = NULL;
do {
pBytes = FileUtils::getInstance()->getFileData("protocal.json", "r", &size);
CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);
std::string load_str((const char*)pBytes, size);
CC_SAFE_DELETE_ARRAY(pBytes);
_doc.Parse<0>(load_str.c_str());
CC_BREAK_IF(_doc.HasParseError());
//生成json文档对像
if(!_doc.IsObject())
return;
//是否有此成员
if(!_doc.HasMember("entities"))
return;
// 通过[]取成员值,再根据需要转为array,int,double,string
const rapidjson::Value &pArray = _doc["entities"];
//是否是数组
if(!pArray.IsArray())
return;
for (rapidjson::SizeType i = 0; i < pArray.Size(); i++)
{
const rapidjson::Value &p = pArray[i];
if(p.HasMember("entity"))
{
const rapidjson::Value &valueEnt = p["entity"];
if(valueEnt.HasMember("TapOpposite") && valueEnt.HasMember("Interval") && valueEnt.HasMember("BallNum"))
{
const rapidjson::Value &tapOpposite = valueEnt["TapOpposite"];
int tapOp = tapOpposite.GetInt(); //得到int值
const rapidjson::Value &interval = valueEnt["Interval"];
float inter = interval.GetDouble(); //得到float,double值
const rapidjson::Value &ballNum = valueEnt["BallNum"];
int ball = ballNum.GetInt(); //得到int值
CCLOG("tapOp==%d, inter==%f, ball==%d", tapOp, inter, ball);
}
}
else
{
return;
}
}
bRet = true;
} while (0);
}
"entities": [
{
"entity": {
"TapOpposite": 0,
"Interval": 0.95,
"BallNum": 1
}
},
{
"entity": {
"TapOpposite": 0,
"Interval": 0.91,
"BallNum": 2
}
},
{
"entity": {
"TapOpposite": 0,
"Interval": 0.95,
"BallNum": 3
}
}
]
}