cocos2dx 3.X에서 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콘텐츠 SaaS | JSON 스키마 양식 빌더Bloomreach Content를 위한 JSON Form Builder 맞춤형 통합을 개발합니다. 최근 Bloomreach Content SaaS는 내장 앱 프레임워크를 사용하여 혁신적인 콘텐츠 유형 필드를 구축할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.