json解析
CrossApp使用lib_json来解析json文件。lib_json已经加入了libExtensions下,我们在CrossApp中使用非常的便捷。
首先引入头文件
#include "CrossAppExt.h"
using namespace CSJson;
我们先熟悉一下几个类名和函数
/*
Value:写过脚本、弱语言的童鞋应该很清楚var,其他Value 和var一个道理,都是可以表示很多数据类型的数据类型。
这话可能比较绕,简单说就是Value你可以理解可以是int 也可以是string 也可以是其他数据类型。
当然定义 Value value,只是个定义,还没有决定其数据类型,如果你Value value =10;那么value 就是个整型
在用于JSON时,我们常表示为一个map,其中包括 key-value,键值对
其中Value 中包括一些将其转为基础数据类型的6个方法,如下:
value.asCString();
value.asString();
value.asBool();
value.asDouble();
value.asInt();
value.asUInt();
*/
Value map;
/*
FastWriter:起作用是将Value数据编码成JSON格式的数据
常用函数:write(<#const Json::Value &root#>)
*/
Json::FastWriter write;
/*
Value:作用与FastWriter相反,是将JSON格式的数据解析成一个Value
常用函数: reader.parse(<#std::istream &is#>, <#Json::Value &root#>)
*/
Json::Reader reader;
通过上面的注释,我们可以很清楚的了解函数的意义。下面我们开始生成Json数据和解析Json数据。
Json数据生成
//先定义数据
Value map;
map["name"] = "9miao";
map["password"] = "123456";
map["Email"] = "9miao@longtugame.com";
map["PHONE"] = 10086;
//编码成json数据
FastWriter write;
string jsonData = write.write(map);
//打印结果
CCLog("jsonData:%s", jsonData.c_str());
上面的打印结果:
jsonData:{"Email":"9miao@longtugame.com","PHONE":10086,"name":"9miao","password":"123456"}
Json数据解析
有时候我们需要解析Resources目录下的json文件,首先我们就需要将json文件拷贝到Resources目录下。我们将下面的Json格式文件拷贝到Resources目录下命名为info.json.
{ "info": [ {"name":"aaa","num":"0001"}, {"name":"bbb","num":"0002"}, {"name":"ccc","num":"0003"}, {"name":"ddd","num":"0004"}, {"name":"eee","num":"0005"}, {"name":"fff","num":"0006"}, {"name":"ggg","num":"0007"}, {"name":"hhh","num":"0008"}, {"name":"iii","num":"0009"}, {"name":"jjj","num":"0010"}, {"name":"kkk","num":"0011"}, {"name":"lll","num":"0012"}, {"name":"mmm","num":"0013"}, {"name":"nnn","num":"0014"}, {"name":"ooo","num":"0015"}, {"name":"ppp","num":"0016"} ], "gender": "male", "occupation": "coder"}
我们在程序中添加以下代码对其解析:
Reader reader;
//定义Valuer
Value value;
//json文件路径
string jsonFile = CCFileUtils::sharedFileUtils()->fullPathForFilename("info.json");
//将文件生成CCString对象
CCString* json = CCString::createWithContentsOfFile(jsonFile.c_str());
//将数据解析到value中
if (reader.parse(json->getCString(),value))
{
int length = value["info"].size();
//循环解析子节点
for (int index = 0; index < length; index++)
{
std::string name = value["info"][index]["name"].asString();
std::string num = value["info"][index]["num"].asString();
CCLog("name:%s", name.c_str());
CCLog("num:%s", num.c_str());
}
//获取方式一
Value valueGender;
valueGender = value.get("gender", valueGender);
std::string gender = valueGender.asCString();
//获取方式二
std::string occupation = value["occupation"].asCString();
CCLog("gender:%s", gender.c_str());
CCLog("occupation:%s", occupation.c_str());
}