cocos2d-x中使用json
首先去下载JsonCpp这个库,放到项目的Class目录下,再在项目中添加进来。


然后、、、然后看图。。。
//JsonTestLayer.h
#pragma once
#include "json/json.h"
#include "cocos2d.h"
USING_NS_CC;
class JsonTestLayer : public CCLayer
{
public:
CREATE_FUNC(JsonTestLayer);
bool init();
protected:
};
//JsonTestLayer.cpp
#include "JsonTestLayer.h"
#include <string>
#include <iostream>
using namespace std;
#define jsonFilePath "file/json_test.txt"
#define LABEL_FONT_SIZE 28
#define LABEL_FONT_NAME "Arial"
enum TAG
{
Tag_Label_Direction
,Tag_Label_Format
,Tag_Label_Id
,Tag_Label_Name
,Tag_Label_Sex
,Tag_Label_Love
,Tag_Label_Chat
};
bool JsonTestLayer::init()
{
bool bRet = false;
do
{
CC_BREAK_IF( !CCLayer::init() );
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Json test
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//read file
unsigned long dataSize;
unsigned char * pData;
pData = CCFileUtils::sharedFileUtils()->getFileData(jsonFilePath, "r", &dataSize);
if( pData==NULL || dataSize==0 )
{
CCLog("JsonTestLayer --> getdata json_test file error!");
break;
}
//解析
Json::Reader reader;
Json::Value root;
if ( !reader.parse(string(pData, pData+dataSize), root) )
{
CCLog("ERROR: JsonTestLayer --> parse json_test file error!");
break;
}
// 1. direction
string strDirection = root["direction"].asString();
CCLabelTTF* labelDirection = CCLabelTTF::create(strDirection.c_str(), LABEL_FONT_NAME, LABEL_FONT_SIZE, CCSize(winSize.width-60, 0), kCCTextAlignmentLeft);
addChild(labelDirection, 1, Tag_Label_Direction);
labelDirection->setAnchorPoint(ccp(0.5,1));
labelDirection->setPosition(ccp(winSize.width/2, winSize.height-20));
// 2. format
string strFormat = root["format"].asString();
CCLabelTTF* LabelFormat = CCLabelTTF::create(strFormat.c_str(), LABEL_FONT_NAME, LABEL_FONT_SIZE, CCSize(winSize.width-60, 0), kCCTextAlignmentLeft);
addChild(LabelFormat, 1, Tag_Label_Format);
LabelFormat->setAnchorPoint(ccp(0.5,1));
LabelFormat->setPosition(ccp(winSize.width/2, labelDirection->getPositionY()-labelDirection->getContentSize().height-50));
// 3. strings array
Json::Value oneObj;
Json::Value strArr = root["strings"];
if( strArr.size() != 5)
{
CCLog("ERROR: JsonTestLayer --> json file size is [%d]", strArr.size());
break;
}
// for(Json::Value::iterator it= strArr.begin(); it!=strArr.end(); ++it)
// array 1 -> id (int)
oneObj = strArr[(Json::Value::UInt)0];
int id = oneObj["id"].asInt();
// array 2 -> name (string)
oneObj = strArr[1];
string name = oneObj["name"].asString();
// array 3 -> sex (bool)
oneObj = strArr[2];
bool sex = oneObj["sex"].asBool();
// array 4 -> love (null)
oneObj = strArr[3];
int love1 = oneObj["love"].asInt();
string love2 = oneObj["love"].asString();////////
// array 5 -> chat
oneObj = strArr[4];
string chat = oneObj["chat"].asString();
char buf[20] = "";
//
sprintf(buf, "%d", id);
CCLabelTTF* labelId = CCLabelTTF::create(buf, LABEL_FONT_NAME, LABEL_FONT_SIZE);
addChild(labelId, 1, Tag_Label_Id);
labelId->setPosition(ccp(winSize.width/2, winSize.height/2 - 50));
//
CCLabelTTF* labelName = CCLabelTTF::create(name.c_str(), LABEL_FONT_NAME, LABEL_FONT_SIZE);
addChild(labelName, 1, Tag_Label_Name);
labelName->setPosition(ccp(winSize.width/2, winSize.height/2-100));
//
if(sex) strcpy(buf, "male");
else strcpy(buf, "female");
CCLabelTTF* labelSex = CCLabelTTF::create(buf, LABEL_FONT_NAME, LABEL_FONT_SIZE);
addChild(labelSex, 1, Tag_Label_Sex);
labelSex->setPosition(ccp(winSize.width/2, winSize.height/2-150));
//
//
CCLabelTTF* labelChat = CCLabelTTF::create(chat.c_str(), LABEL_FONT_NAME, LABEL_FONT_SIZE, CCSize(winSize.width-60, 0), kCCTextAlignmentLeft);
addChild(labelChat, 1, Tag_Label_Chat);
labelChat->setPosition(ccp(winSize.width/2, winSize.height/2-200-labelChat->getContentSize().height/2));
bRet = true;
} while (0);
return bRet;
}
//json解析的文件。。

exe

——————————此人很懒、、、

浙公网安备 33010602011771号