正文
json 文件解析与应用
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
第一步:首先弄一个 json 文件 我这里成为 config.json 内容如下
{
"":
{
"id":,
"desc":"中华人民共和国"
},
"":
{
"id":,
"desc":"中国人民银行"
}
}
第二步:添加解析 json 文件的函数 记得 首先声明一个全局的 map 容器 或者成员的 map 容器 map_ForText
int HelloWorld::parse_json()
{
unsigned long size = ;
unsigned char* pData = nullptr; pData = CCFileUtils::sharedFileUtils()->getFileData("config.json","rb",&size);
if( !pData )
return -; CSJson::Reader j_reader;
CSJson::Value root_value; if( !j_reader.parse((const char*)pData, (const char*)(pData+size), root_value) )
{
CCLOG("/n%s/n", j_reader.getFormattedErrorMessages().data());
CC_SAFE_DELETE_ARRAY(pData);
return -;
} for( CSJson::Value::iterator iter=root_value.begin(); iter!=root_value.end(); ++iter )
{
int id = ;
string str = ""; CSJson::Value &v = (*iter)["id"];
if( !v.empty() )
{
id = v.asInt();
} v = (*iter)["desc"];
if( !v.empty() )
{
str = v.asString();
}
map_ForText.insert(make_pair(id,str));
} return ;
}
第三步:添加获得字符串的函数
const char* HelloWorld::get_text(int id)
{
CCLOG("This is HelloWorld::get_text");
auto iter = map_ForText.find(id);
if( iter != map_ForText.end() )
{
return (iter->second).c_str();
}
return "";
}
第四步:使用cocoStudio编辑器 编辑一个界面 创建一个 文本框(UILabel) 到这个界面上 如下图
然后将其导出 ,这里我创建时命名为 NewProject 这样生成后 导出大图 将会导出文件 NewProject_1.ExportJson
第五步:把这个界面加载到 场景中并初始化 这个 UILabel 的内容 为 “中华人民共和国” (对应 .json 文件的 id 为1000)
parse_json(); //首先调用解析文件的函数 UILayer* widLayer = UILayer::create();
UIWidget* widget = CCUIHELPER->createWidgetFromJsonFile("NewProject_1.ExportJson");
UILabel* lab_text = static_cast<UILabel*>(widget->getChildByName("lab_text_info"));
const char* text = get_text();
lab_text->setText(text); widLayer->addWidget(widget);
this->addChild(widLayer);
这样之后,就会出现我们期待已久的效果,添加文件中的中文 输出到屏幕上 如下如所示:(当然在界面上我还添加了一些其他的元素 ,不过这不影响我们期待的效果)
“中华人民共和国” 即 对应 我们之前的 json 文件 id:1000 所对应的内容
初来乍到,请多赐教 …… 如有意见或建议,请留言 18310094097@163.com