Cocos2d-x学习(五):cocos2d-x解析json(使用libjson库)

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 18:17 点击:

cocos2d-x很好,扩展性很好,但是其第三方库还不是很成熟,正如王哲所说,需要我们自己寻找,比如json解析和格式化。

 


我们的网络部分需要用到json,网络部分用的比较多的就是json,毕竟很轻量级么。。。上午我看到cocos2d-x论坛里关于json的第三方库有人提到了两个,一个是jsoncpp,一个是libjson,我上午首选的是jsoncpp,看其编译过程,是比较复杂的,我耐着性子又下了scons(编译器),编是编出来了,可是在iphone上会报link的错,不知其解,在Mac app中使用,正常。。。擦,原来是Mac是64位的,而iphone需要的是32位库的,又是各种找答案,终于在其官网的wiki上找到解答-------在Mac 64位上编出32位库的方法,试了,发现编不过去,好像是gcc版本的原因,再看下面的warning,上面说对Mac的支持就是不怎么样!好吧,我承认它不是跨iphone和android的最佳选择了。(在ubuntu上编译很轻松,没问题的,应该android上没问题),于是下午我就转向了libjson。

 


1.json介绍
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。


JSON建构有两种结构:

  1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。   2.值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。


(ps:这两段是从百度百科上copy的,但是json的第2种结构很重要,是人们常常忽视的)

 


2.编译
论坛里也有人提问过libjson怎么用,王哲给出的答案是直接copy源码到工程里,想必没有太复杂的编译参数,环境之类的障碍,于是我就copy了,编译,没错!工程如图

(copy了libjson下的Source,Dependencies目录和JSONOptions.h,libjson.h)

 \


(PS: 只所以把光标放在JSONOptions.h上,是因为它很邪恶,几个宏和其开关的用法,源码竟然还有个bug。。。)

 


3.用法
libjson为我们提供了两套接口,一套c的,一套c++的,在其目录的Getting Started目录下,至于选择就因人喜好了!

 \


(1)简单写法:

[cpp]
<span style="font-size:16px;">JSONNODE *n = json_new(JSON_NODE); 
    json_push_back(n, json_new_i("number", 88)); 
    json_push_back(n, json_new_a("string", "oneRain")); 
    json_push_back(n, json_new_a("charactor", "中文")); 
     
    json_char *jc = json_write_formatted(n); 
    CCLOG("json: %s", jc); 
    json_free(jc); 
    json_delete(n);</span> 
<span style="font-size:16px;">JSONNODE *n = json_new(JSON_NODE);
    json_push_back(n, json_new_i("number", 88));
    json_push_back(n, json_new_a("string", "oneRain"));
    json_push_back(n, json_new_a("charactor", "中文"));
   
    json_char *jc = json_write_formatted(n);
    CCLOG("json: %s", jc);
    json_free(jc);
    json_delete(n);</span>输出结果:

 


(2)简单读法:
读取就需要一个简单的解析过程了,当然也可以没有,如果没有键的话


[cpp]
<span style="font-size:16px;">void ParseJSON(JSONNODE *n) 

    if (n == NULL){ 

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • cocos2d-x学习笔记(19)--label 、label atlas
      • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
      • Cocos2d-x学习(一):HelloWorld
      • cocos2dx在xcode下开发,编译到android上(2)
      • cocos2d 设置屏幕默认方向
      • Cocos2d-x 2.0 之 Actions “三板斧” 之一
      • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
      • cocos2d-x学习笔记(18)--游戏打包(windows平台)
      • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1