Json⽂文件如下:
{"tiles" : [ [1, 0, 1, 1, 1, 1, 1, 1, 1 ],
[1, 1, 1, 1, 1, 1, 1, 1, 1 ],
[1, 1, 1, 1, 1, 1, 1, 1, 1 ],
[1, 1, 1, 1, 1, 1, 1, 1, 1 ],
[1, 1, 1, 1, 1, 1, 1, 1, 1 ],
[1, 1, 1, 1, 1, 1, 1, 1, 1 ],
[1, 1, 1, 1, 1, 1, 1, 1, 1 ],
[1, 1, 1, 1, 1, 1, 1, 1, 1 ],
[1, 1, 1, 1, 1, 1, 1, 1, 1 ] ],
"targetScore" : 1000, "moves" : 15}注意:最后⼀一个数据不要加逗号!!
0.头⽂文件
#include "json/rapidjson.h"
#include "json/document.h"
1.获取json⽂文件的路径
string strPath = FileUtils::getInstance()->fullPathForFilename(strName);//strName为⽂文件名,⽐比如 ”Level_0.json”
2.读取⽂文件
Unsigned char* ch = FileUtils::getInstance()->getFileData(strPath, "r", &size);//size为⽂文件的字节数
3.创建⼀一个
String string data = string((const
char*)ch,size);
4.定义document对象Document m_doc;
5.解析字符串,并将结果存⼊入m_doc
m_doc.Parse<0>(data.c_str());
6.检错
if (m_doc.HasParseError())
{
CCLOG("GetParaseError: %s\n",m_doc.GetParseError());}
7.根据关键字取值rapidjson::Value &valArray = m_doc["tiles"];
8.判断值类型是否与预期相同
if(valArray.IsArray())//判断是否为数组类型
valArray.IsString(),valArray.IsInt()…
{
//操作
}
9.对⼆维数组的操作
if(valArray.IsArray())//判断是否为数组
{
for (int i = 0; i < valArray.Capacity(); i++)
{
rapidjson::Value&valInnerArray = valArray[i];//json第i⾏
if(valArray.IsArray())//判断是否为数组
{
for (int j = 0; j < valInnerArray.Capacity(); j++)
{
rapidjson::Value&valInt = valInnerArray[j];//
json第j列
CCLOG("tile[%d][%d] = %d",i,j,valInt.GetInt());
if (0 == i && 1 == j)
{
valInt.SetInt(13);//设置新的数据
CCLOG("new tile[%d][%d] =
%d",i,j,valInt.GetInt());
}
}
}
}
}
部分结果截图如下:将第⼀⾏第⼆列的0变成了13