Cocos2d-xJson数据解析(读取和写入)# Cocos2d-xJson数据解析(读取和写入)
资源文件下载链接:点击下载
资源中包括cJson库文件以及封装的cJsonFile文件。
Json文件格式
{
"mainKey1": {
"key": "world",
"value": "立身不从一步起,如尘里振衣,泥中濯足,如何超尘脱俗?处世不会退一步,如飞蛾投烛,羝羊触藩,如何堂正为人?这需要我们“三省”自己的追求与志向,这需要我们“三省”自己的处事和做人,可是,倘若蚍蜉撼大树的狂妄,蟪蛄不知春秋的无知,即使有再高的志向和理想,也与成功无缘。自立,需要自身的信心和智能去寻找;自强,更需要我们的毅力和反思。处世不是八面玲珑的圆滑,不是左右逢源的奉承,而是我们自省的真诚过程,自省的高尚精神。"
},
"mainKey2": {
"key": "2",
"value": "世界"
}
}
MainScene.h
#pragma once
#include "cocos2d.h"
class MainScene :public cocos2d::Scene
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
CREATE_FUNC(MainScene);
};
MainScene.cpp
#include "MainScene.h"
#include "SimpleAudioEngine.h"
#include "cJsonFile.h"//该文件在资源链接里面进行下载
USING_NS_CC;
using namespace cocos2d::ui;
using namespace CocosDenshion;
float MainScene::actionDuration = 1.0f;
cocos2d::Scene* MainScene::createScene()
{
return MainScene::create();
}
static void problemLoading(const char* filename)
{
printf("Error while loading:%s\n", filename);
printf("Depending on how you compiled you might have to add 'Resources/' in front of filenames in MainScene.cpp\n");
}
bool MainScene::init()
{
if (!Scene::init())
return false;
auto visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
//读取json文件
char jsonBuf[10240] = { 0 };
int ret = readFileContents("test.json", jsonBuf, sizeof(jsonBuf));
cJSON* root = nullptr;
root = cJSON_Parse(jsonBuf);
if (!root)
{
problemLoading("test.json");
return false;
}
cJSON* mainKey1 = cJSON_GetObjectItem(root, "mainKey1");
cJSON* value1 = cJSON_GetObjectItem(mainKey1, "value");
//显示文字内容
auto prt_content = value1->valuestring;
//开始不显示任何内容
auto prt_label = Label::create(prt_content, "方正姚体", 30);
prt_label->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
prt_label->setPosition(Vec2(visibleSize / 2));
prt_label->setColor(Color3B(248, 248, 255));
prt_label->enableBold();
prt_label->setDimensions(400.0f, 0);//使用纯英文换行失效,只有存在中文才可能生效!
this->addChild(prt_label);
//更改json文件内容
changeStringValueByKey(mainKey1, "key", "world");
writeJson2File(root, "test.json");
//log(cJSON_Print(root));
return true;
}
注意点
使用writeJson2File进行写入文件,内部实现主要是使用fwrite,由于cJson封装了相应的cJSON_Print函数,其实现是将json对象转换为字符串,它会以Json标准的格式进行转换(如下图,使用log(cJSON_Print(root));进行输出),包括\r,\t,\n等均会进行添加。因此当我们使用fwrite进行写入仍然不会改变Json文件内容及格式。
Cocos2d-xJson数据解析(读取和写入)_ufgnix0802的博客-CSDN博客_cocos2d json
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天, 点击查看活动详情