Cocos2d-X 学习笔记 17 Cocos2dx Jason数据解析

Cocos2d-X 学习笔记 17 Cocos2dx Jason数据解析,第1张

概述首先了JSON相关知识: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition – December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl

首先了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 @H_419_39@#include "Jsoncpp/include/Json/Json.h"

第三步:常用示例

3.1 先熟悉几个类名和函数:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 /* 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(); */ 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数据等 *** 作吧:

24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 //创建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

整体来说JsON CPP 还是很非常好用的,就不多扯了~ 再复杂的数据只要会了如上,基本就全OK;

需要注意的两点:

1. 使用Value的get函数时,如果你传入第二个参数(默认Value),那么一定要将获得的结果赋值给第二个参数,防止get函数找到对应Key时,Value没人要的问题发生。如下:

Json::Value value;

value = xx .get(“key”,value);

当然你很确定key,你也可以:

Valuevalue =xx .get(“key”,NulL);

2.使用get获取的value,一定要注意其数据类型,不要获取的是个整型,还要使用asCString()函数转换。

总结

以上是内存溢出为你收集整理的Cocos2d-X 学习笔记 17 Cocos2dx Jason数据解析全部内容,希望文章能够帮你解决Cocos2d-X 学习笔记 17 Cocos2dx Jason数据解析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存