注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

眼睛想旅行

技术就是我的生命与信仰!

 
 
 

日志

 
 
关于我

精通C,C++,python,Erlang。并熟悉各种其他编程语言,用cocos2dx游戏引擎作过几个项目。会MySQL增删改查,了解OpenGL渲染原理。懂单片机,能设计数字电路系统,会画电路图和设计电路板。喜欢了解最新前沿技术,并持续关注和学习新技术。

网易考拉推荐

cocos2d-x自代的Json库解析json(转)  

2015-03-12 01:00:13|  分类: cocos2d-x |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
之前在2.0.3版本的时候用过一个jsonCpp的库,不过后来的版本是好像加入了json库,因为cocostudio导出的界面数据和骨格动画数据用的其实就是json文件。没有看库里边是怎么解析的,在网上找了一下,找到了下边的文章说不定有用。现在手机游戏热火超天的时代快过去了,网上相关的文章是越来越少了,cocos2d-x用的是C++所以学习成本相对来说也比Unity3d要高很多。但这个引擎是开源的,可以使用大量的第三方C++库。这一点是没有什么游戏引擎可以比的了的。
json研究了一天,累死了,看了网上发的各种解析方法,都弄的一知半解,也不提供一个demo让我们这些菜鸟看一下,无奈,自己整一个,希望能帮到那些在json解析上卡壳的程序猿!
要解析json先得知道json是什么,什么样的结构,英文好的去http://www.json.org/看,官网,清晰明了。英文不好的去http://www.w3school.com.cn/json/json_intro.asp看,讲得也不错,json本身简单,看看就可以了!
在提供一个json的矫正工具,防止在json格式上纠结:http://www.ij2ee.com/bejson/bejson.html
好了,该上硬货了:
先导入Json.h头文件,我用的是2.2版本的,3.0版本的需要自己指一下路径,然后json获取的方法名有些变动,不过变动不是很大!
3.2版本 #include "editor-support/spine/Json.h"
void FirstLayer::parseJsonObjects(char *pJsonStr){
    Json* jsonRoot = Json_create(pJsonStr);
   
    Json* jsonChild = jsonRoot->child;
   
    //    servers = new Vector();
  
    while (jsonChild) {
//下面列举json的6种格式,都比较简单,我就用常用的string类型和比较复杂的array类型做示范吧!
        switch (jsonChild->type) {
            case Json_NULL:{
               
                break;
            }
            case Json_Number:{
           
                break;
            }
            case Json_Object:{
                break;
            }
            case Json_String:{
                CCLOG("<<<<<<<<%s",jsonChild->valuestring);
                break;
            }
            case Json_True:{
                break;
            }
            case Json_Array:{
                Json *json=jsonChild->child;
                CCLOG("size=%d",Json_getSize(jsonChild));
//在这我给出三种遍历json数组的方法,让不同编程风格的人都能找到自己喜欢的遍历方式
//第一种:
               
               
//第二种
                for (int i=0; i
                    Json *jjson=Json_getItemAt(jsonChild, i);
                    CCLOG("<>name=%s",Json_getItem(jjson, "name")->valuestring);
                }
//第三种
               
                while (json) {
                    //单独遍历法
                   
//                    CCLOG("firstName=%s,lastName=%s",Json_getString(json, "firstName", NULL),Json_getString(json, "lastName", ""));
                    Json* tags = Json_getItem(json,"tags");
                    Json* name = Json_getItem(json,"name");
                    Json* source = Json_getItem(json,"source");
                    CCLOG("tags:%s,name=%s,source=%s", tags->valuestring,name->valuestring,source->valuestring);
                    json=json->next;
                }
                break;
            }
            default:
                break;
        }
        jsonChild=jsonChild->next;
    }

   //遍历结束,释放json对象结构
    Json_dispose(jsonRoot);
}

在需要调用上述方法的地方写上如下代码:
//获取json文件的路径
std::string path=CCFileUtils::sharedFileUtils()->fullPathForFilename("newFile.json");
    unsigned long len=0;
    if(CCFileUtils::sharedFileUtils()->isFileExist(path)){
//读取文件数据
    unsigned char* str=CCFileUtils::sharedFileUtils()->getFileData("newFile.json", "r", &len);
//调用上面写的解析函数
    this->parseJsonObjects((char*)str);
    }
OK,是不是就成功了!
好了,是不是很简单,这是cocos2dx中自带的方法,还有大神介绍libjson和jsonbox来解析,我会继续关注的,大家感兴趣的也可以去研究一下,希望能写出详细的教程,让我这等菜鸟能够快速入门吧!
上面Demo的下载可以去:http://dl.vmall.com/c0arw894y9
转载请注明仗剑量天http://blog.sina.com.cn/s/blog_923fdd9b0101f94n.html
  评论这张
 
阅读(557)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017