Cocos2d-xJson数据解析(读取和写入)

57 阅读2分钟

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 天,     点击查看活动详情