首先了JSON相关知识:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition – December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
JSON官网地址:http://json.org
常用的几个版本包括C,Python等
那么针对cocos2dx 我们应该使用c++的版本~
第一步: 下载cpp版本的json
http://vdisk.weibo.com/s/yZxRoLm4SZZDD(Himi 微盘)
第二步: 解压文件夹放置项目中即可使用
1
|
#include "jsoncpp/include/json/json.h"
|
第三步:常用示例
3.1 先熟悉几个类名和函数:
/*
Value:写过脚本、弱语言的童鞋应该很清楚var,其他Value 和var一个道理,都是可以表示很多数据类型的数据类型,。
这话可能比较绕,简单说就是Value你可以理解可以是int 也可以是string 也可以是其他数据类型。
当然定义 Value value,只是个定义,还没有决定其数据类型,如果你Value value =10;那么value 就是个整型
在用于JSON时,我们常表示为一个map,其中包括 key-value,键值对
value.asCString();
value.asString();
value.asBool();
value.asDouble();
value.asInt();
value.asUInt();
*/
Json::FastWriter write;
/*
FastWriter:起作用是将Value数据编码成JSON格式的数据
常用函数:write(< #const Json::Value &root#>)
*/
Json::Reader reader;
/*
Value:作用与FastWriter相反,是将JSON格式的数据解析成一个Value
常用函数: reader.parse(< #std::istream &is#>,< #Json::Value &root#>)
*/
以上是常用的类和函数已经注释说明的很清楚了,那么下面我们开始进行制作JSON数据、解析JSON数据等操作吧:
//------先定义数据
Json::Value map;
map[
"name"
]=
"Himi"
;
"age"
]=23;
//------编码成json数据
string jsonData =write.write(map);
CCLOG(
"jsonData:%s"
,jsonData.c_str());
//打印结果 Cocos2d: jsonData:{"age":23,"name":"Himi"}
//解析JSON数据
//--先将数据解析到 Value(parseData)中
Json::Value parseData;
reader.parse(jsonData,parseData);
Json::Value valueName =
"默认"
;
Json::Value valueAge = -1;
valueName = parseData.get(
valueAge = parseData.get(
const
char
* nameStr =valueName.asCString() ;
int
age = valueAge.asInt();
"name:%s,age:%d"
//打印结果:Cocos2d: name:Himi,age:23
//使用get函数时,第一个参数是key的名, 第二个参数是如果找不到对应key的默认Value
//举例我们将name和age,故意写错:
// Json::Value parseData;
// reader.parse(jsonData,parseData);
//
// Json::Value valueName = "默认";
// Json::Value valueAge = -1;
// valueName = parseData.get("nameHimi",valueName);
// valueAge = parseData.get("ageHimi",valueAge);
//
// const char* nameStr =valueName.asCString() ;
// int age = valueAge.asInt();
// CCLOG("name:%s,age:%d",age);
//打印结果:Cocos2d: name:默认,age:-1
//复杂一点JSON的编写和解析
Json::Value root;
Json::Value array;
array[
"arrKey1"
"arrValue1"
;
"arrKey2"
"arrValue2"
;
"arrKey3"
"arrValue3"
;
root[
"arrayKey"
] =array;
string hJsonData = write.write(root);
"复杂一点的JSON格式数据:%s"
//打印结果 Cocos2d: 复杂一点的JSON格式数据:{"arrayKey":{"arrKey1":"arrValue1","arrKey2":"arrValue2","arrKey3":"arrValue3"}}
Json::Value parseRoot;
Json::Value parseArray;
reader.parse(hJsonData,parseRoot);
parseArray = parseRoot.get(
"解析出的数据:%s,%s,%s"
parseArray.get(
//打印结果:Cocos2d: 解析出的数据:arrValue1,arrValue2,arrValue3