cocos2dx 3.X에서 json 파일 생성 및 읽기

Cocos2d-x 3.0은rapidjson 라이브러리를 추가하여 json 해석에 사용합니다.프로젝트의cocos2d/external/json 아래에 있습니다.
rapidjson은 포함할 필요가 없습니다.lib 및.dll에서 실행할 수 있는 보이는 코드 라이브러리입니다.프로젝트wiki 여기 있습니다.다음은 두 가지 실례를 통해cocos2dx에서의 용법을 깊이 있게 이해한다.
참고: CCLOG() 함수는 DEBUG 모드에서만 작동합니다.
JSON 파일 생성 및 저장
#include "CCStdC.h"
#include "cocos2d.h"
#include "json/document.h"
#include "json/writer.h"
#include "json/stringbuffer.h"
using namespace  rapidjson;

USING_NS_CC;

int main()
{
	//***    json   ,    getWritablePath      ***
    rapidjson::Document writedoc;
	writedoc.SetObject();
	rapidjson::Document::AllocatorType& allocator = writedoc.GetAllocator();
	rapidjson::Value array(rapidjson::kArrayType);
	rapidjson::Value object(rapidjson::kObjectType);
	
	// json object      “  / ”  
	object.AddMember("inttag", 1, allocator);
	object.AddMember("doubletag", 1.0, allocator);
	object.AddMember("booltag", true, allocator);
	object.AddMember("hellotag", "helloworld", allocator);
	
	// json     
	array.PushBack(object, allocator);
	
	// json object      “  / ”  
	writedoc.AddMember("json", "json string", allocator);
	writedoc.AddMember("array", array, allocator);
 
	StringBuffer buffer;
	rapidjson::Writer<StringBuffer> writer(buffer);
	writedoc.Accept(writer);

	auto path = FileUtils::getInstance()->getWritablePath();
	path.append("myhero.json");
	FILE* file = fopen(path.c_str(), "wb");
	if(file)
	{
		fputs(buffer.GetString(), file);
		fclose(file);
	}
	CCLOG("%s",buffer.GetString());

    return 0;
}

나는 VS2012로 컴파일한 것으로 최종적으로 생성된 json 파일은\proj에 있다.win32\Debug.win32 폴더 아래.열기는 다음과 같습니다.
{"json":"json string","array":[{"inttag":1,"doubletag":1,"booltag":true,"hellotag":"helloworld"}]}
JSON 파일 읽기 및 표시
rapidjson은 원래 json 형식에 따라 해석 방법을 단독으로 작성해야 하기 때문에 상기 생성 방법에 따라 해석 방법은 다음과 같아야 한다.
4
#include "CCStdC.h"
#include "cocos2d.h"
#include "json/document.h"
#include "json/writer.h"
#include "json/stringbuffer.h"
using namespace  rapidjson;

USING_NS_CC;

int main()
{
	auto path = FileUtils::getInstance()->getWritablePath();
	path.append("myhero.json");

	//***    json    ***
	rapidjson::Document readdoc;
	bool bRet = false;
	ssize_t size = 0;
	std::string load_str;

	// getFileData      ,       Resource    
	unsigned char* titlech = FileUtils::getInstance()->getFileData(path, "r", &size);
	load_str = std::string((const char*)titlech,size);

	//load_str = cocos2d::FileUtils::getInstance()->getStringFromFile("..\\myhero.json");
	readdoc.Parse<0>(load_str.c_str());	
	if(readdoc.HasParseError())
	{
		CCLOG("GetParseError%s
", readdoc.GetParseError()); } if(!readdoc.IsObject()) return 0; rapidjson::Value& _json = readdoc["json"]; const char* ch = _json.GetString(); cocos2d::log(ch); cocos2d::log(_json.GetString()); rapidjson::Value& _array = readdoc["array"]; if(_array.IsArray()) { CCLOG("test"); for(int i=0; i<_array.Capacity(); i++) { //CCLOG("%d", i); rapidjson::Value& arraydoc = _array[i]; if(arraydoc.HasMember("inttag")) { int _inttag = arraydoc["inttag"].GetInt(); CCLOG("%d", _inttag); } if(arraydoc.HasMember("doubletag")) { double _doubletag = arraydoc["doubletag"].GetDouble(); CCLOG("%lf", _doubletag); } if(arraydoc.HasMember("booltag")) { bool _booltag = arraydoc["booltag"].GetBool(); CCLOG("%d", _booltag); } if(arraydoc.HasMember("hellotag")) { const char* _hellotag = arraydoc["hellotag"].GetString(); CCLOG("%s", _hellotag); } } } return 0; }
CCLOG의 최종 디스플레이는 다음과 같습니다.
json string json string test 1 1.000000 1 helloworld

좋은 웹페이지 즐겨찾기