- 浏览: 278561 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhang_shuai870717:
求指教。没懂
Graphics 的translate(int x, int y) 函数 -
刘亮love小雪:
楼主我还是没有懂啊
Graphics 的translate(int x, int y) 函数 -
wenhaoliu:
大侠!我在从ios平台移植到android平台遇到很多问题!编 ...
android平台移植总结 -
lansehuan:
dwpcny 写道楼主 你给得链接是你自己才能看得啊 。我也遇 ...
cocos2d-x,windows环境配置总结 -
leishengwei:
u_xtian 写道jifengyu 写道楼主你好,我想问一下 ...
(转)Android开发:在EditText中关闭软键盘
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)简单写法:
输出结果:
(2)简单读法:
读取就需要一个简单的解析过程了,当然也可以没有,如果没有键的话
调用过程
结果如图:
(3)json数组
很多时候我们需要json格式来存储数组,有可能是对象的数组,也可能是基本变量的数组,如果是对象数组的话,就需要在“简单读法”中的ParseJSON方法中添加一些对对象的申请和对链表的操作才能完成你想要的数据结构!
当然另一种比较常用的用法是:只有“值”,没有“键”的数组,比如 ["value1","value2","value3"],这种格式是常用于socket链接中与服务器通信的,下面就分别写一个解析和格式化的两种方式:
a.解析
当然还是需要一个解析的函数用来输出和递归用的
用法很简单
b.格式化
也就是拼接json字符串了
需要注意的是如果不想要“键”,则将对应参数设置为NULL,对象中不能这样做,数组中可以
特别PS:如果希望汉字原样输出,而不转化成utf-8编码格式,需要将JSONOptions.h中的宏关闭
5-24记录:libjson中判断结点类型c方法json_type(const void *node)
已定义类型
原文:http://blog.csdn.net/onerain88/article/details/7595563
我们的网络部分需要用到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)简单写法:
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);
输出结果:
(2)简单读法:
读取就需要一个简单的解析过程了,当然也可以没有,如果没有键的话
void ParseJSON(JSONNODE *n) { if (n == NULL){ printf("Invalid JSON Node1\n"); return; } JSONNODE_ITERATOR i = json_begin(n); while (i != json_end(n)){ if (*i == NULL){ printf("Invalid JSON Node2\n"); return; } // recursively call ourselves to dig deeper into the tree if (json_type(*i) == JSON_ARRAY || json_type(*i) == JSON_NODE){ ParseJSON(*i); } // get the node name and value as a string json_char *node_name = json_name(*i); // find out where to store the values if (strcmp(node_name, "number") == 0){ json_int_t node_value = json_as_int(*i); CCLOG("%d", node_value); } else if (strcmp(node_name, "string") == 0){ json_char *node_value = json_as_string(*i); CCLOG("%s", node_value); json_free(node_value); } else if (strcmp(node_name, "charactor") == 0) CCLOG("%s", json_as_string(*i)); // cleanup and increment the iterator json_free(node_name); ++i; } }
调用过程
char *json = "{\"number\":88,\"string\":\"oneRain\",\"charactor\":\"汉字\"}"; JSONNODE *nr = json_parse(json); ParseJSON(nr); json_delete(nr);
结果如图:
(3)json数组
很多时候我们需要json格式来存储数组,有可能是对象的数组,也可能是基本变量的数组,如果是对象数组的话,就需要在“简单读法”中的ParseJSON方法中添加一些对对象的申请和对链表的操作才能完成你想要的数据结构!
当然另一种比较常用的用法是:只有“值”,没有“键”的数组,比如 ["value1","value2","value3"],这种格式是常用于socket链接中与服务器通信的,下面就分别写一个解析和格式化的两种方式:
a.解析
当然还是需要一个解析的函数用来输出和递归用的
void parseArrJSON(JSONNODE *n) { if (n == NULL) { CCLOG("Invalid JSON Node\n"); return; } // Parser JSONNODE_ITERATOR it = json_begin(n); while (it != json_end(n)) { if (*it == NULL) { CCLOG("Invalid JSON Node\n"); return; } if (json_type(*it) == JSON_ARRAY || json_type(*it) == JSON_NODE) { parseArrJSON(*it); } else { // 如果只是值没有键,则只需要获取即可 json_char *value = json_as_string(*it); CCLOG("%s", value); json_free(value); } ++it; } }
用法很简单
char *arrJson = "[\"value1\",\"value2\",\"value3\"]"; JSONNODE *an = json_parse(arrJson); parseArrJSON(an); json_delete(an);
b.格式化
也就是拼接json字符串了
JSONNODE *arrn = json_new(JSON_ARRAY); json_set_name(n, NULL); json_push_back(n, json_new_a(NULL, "one")); json_push_back(n, json_new_a(NULL, "汉字")); json_push_back(n, json_new_i(NULL, 999999)); json_char *arrjc = json_write(arrn); CCLOG("Json: %s, %d", arrjc, strlen(jc));
需要注意的是如果不想要“键”,则将对应参数设置为NULL,对象中不能这样做,数组中可以
特别PS:如果希望汉字原样输出,而不转化成utf-8编码格式,需要将JSONOptions.h中的宏关闭
#define JSON_ESCAPE_WRITES
5-24记录:libjson中判断结点类型c方法json_type(const void *node)
已定义类型
#define JSON_NULL '\0' #define JSON_STRING '\1' #define JSON_NUMBER '\2' #define JSON_BOOL '\3' #define JSON_ARRAY '\4' #define JSON_NODE '\5'
原文:http://blog.csdn.net/onerain88/article/details/7595563
发表评论
-
C++正则表达式匹配、分割字符串
2017-11-14 16:32 2140#include "stdafx.h" # ... -
C语言字节对齐示例
2014-09-23 16:44 768#include "stdafx.h" ... -
(转)C语言字节对齐
2014-09-23 16:16 708文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但 ... -
C++ stl中remove的实现
2013-09-24 23:14 982原文:http://www.cplusplus.com/ref ... -
(转)c++ explicit构造函数
2013-09-11 18:51 695按照默认规定,只有一 ... -
(转)string替换所有指定字符串(C++)
2013-07-27 17:01 1882C++的string提供了replace方法来实现字符串的替换 ... -
C++哲学
2013-01-10 20:34 846即:只为用到的东西付出代价。 -
jni文件传递方法参数
2012-11-26 17:43 5631使用jni从java传递多个参数到c++时,如果是多个参数,当 ... -
(转)C++ string类的一些函数方法
2012-10-24 14:41 884string类的构造函数: string(const char ... -
CCTMXTiledMap使用的几个事项
2012-08-02 11:12 7368项目中的地图层采用coco ... -
android平台移植总结
2012-07-30 13:11 2744最近完成了一款游戏的android平台移植,从ios平台移植到 ... -
(转)子类重新父类方法的限制
2012-07-23 15:17 927若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要 ... -
(装)NDK Build 参数
2012-07-17 16:20 2835'ndk-build' Overview ndk-build ... -
(转)在VS2005下使用libjson注意事项
2012-07-17 15:31 1710最近项目中要使用libjson,无奈boost下的1.34版的 ... -
c++ 字符串的一些概念
2012-06-13 00:16 1201今天看到《c++ primer》上 ... -
c++ vector方法push_back的新理解
2012-05-25 11:57 0写了上篇文章 对c++方法返回对象的理解(对c++方法返回对象 ... -
对c++方法返回对象的理解
2012-05-25 11:51 1203今天更深刻的认识到了通过方法返回一个对象或者数组是不可以的,因 ... -
C/C++ 指针删除的几个细节
2012-05-23 15:44 8855在C/C++中,当指针需要删除时,对于new的指针,调用del ... -
(转)C语言深入浅出可变参数函数的使用技巧
2012-05-23 15:04 1003深入浅出可变参数函数的使用技巧本文主要介绍可变参数的函数使用, ... -
ios c++ 调用oc代码
2012-05-08 14:12 9225今天照猫画虎的用c++调用了一段oc代码,需要注意的一点是为了 ...
相关推荐
Cocos2d-x 2.2.x Json解析Demo 无需引入jsoncpp库 相关博文地址:http://blog.csdn.net/u012945598/article/details/17398925
总的来说,《Cocos2d-x 3.x游戏开发实战》是一本全面覆盖Cocos2d-x 3.x开发技术的指南,它不仅教授基本概念和技术,还通过实例深入解析游戏开发的各个层面。无论你是初学者还是有一定经验的开发者,这本书都能提供...
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
Cocos2d-x是一个广泛使用的开源游戏开发框架,它基于C++,同时支持Lua和JavaScript等多种脚本语言,为开发者提供了高效、跨平台的游戏开发解决方案。在3.13.1版本中,Cocos2d-x对Spine动画引擎的集成进行了更新,这...
本文将详细介绍如何在 Windows 环境下使用 Visual Studio 2010 配置 Cocos2d-x 游戏引擎。Cocos2d-x 是一个跨平台的游戏引擎,可以在多种平台上运行,包括 Windows、Mac OS X、iOS、Android 等。 一、下载和安装 ...
2. **C++核心**:3.8版本的cocos2d-x使用C++作为主要开发语言,保证了性能和灵活性,同时也通过tolua++和jsb提供Lua和JavaScript接口。 3. **强大的渲染引擎**:支持精灵、批处理、骨骼动画、物理引擎等多种图形...
1. **场景(Scene)与层(Layer)管理**:Cocos2d-x使用场景和层的概念组织游戏画面。场景是一个完整的屏幕视图,而层则是场景中的一个可独立管理的部分,多个层可以组合成一个场景。 2. **精灵(Sprite)与动画**...
cocos2d-x 是一个开源的游戏开发框架,使用 C++ 语言编写,支持多平台发布,包括 iOS、Android、Windows、macOS、Linux 和 Web。cocos2d-x v3.16 是该框架的一个版本号,本文档主要介绍了该版本的安装流程以及环境...
12. **扩展与插件**:社区提供的各种扩展库和插件,如社交网络集成、广告支持、IAP(应用内购买)等,丰富了Cocos2d-x的功能。 13. **工具集**:包含了一个完整的工具链,如Cocos Studio用于界面设计,Cocos ...
在移动游戏开发领域,cocos2d-x是一款广泛使用的开源游戏引擎,以其高效、跨平台的特性深受开发者喜爱。而Flash2Cocos2d-x则是一个专为cocos2d-x设计的动画工具,它使得开发者能够将Flash内容轻松地转换为可以在...
《Cocos2d-x实战C++卷》是关东升所著的一本深入探讨Cocos2d-x游戏引擎开发的专业书籍。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程...
《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...
在游戏开发领域,cocos2d-x是一款广泛使用的开源2D游戏引擎,尤其在移动平台上的应用非常广泛。cocos2d-x 3.0版本带来了许多性能优化和新特性,使得开发者能够更高效地创建游戏。本篇文章将深入探讨cocos2d-x 3.0中...
3. Cocos2d-JS开发:这里强调的是使用Cocos2d-x框架结合JavaScript语言进行开发的过程。由于Cocos2d-x支持多种编程语言(包括C++、JavaScript和Lua),Cocos2d-JS意味着开发者可以采用JavaScript来构建游戏项目。 4...
2. C++ 基础:cocos2d-x 使用C++作为主要编程语言,同时提供了Python、JavaScript等语言的绑定,满足不同开发者的需求。 3. 图形渲染:框架内置了基于OpenGL的图形渲染引擎,提供2D图形绘制、动画处理等功能,使...
cocos2d-x-2.1.5
2. **JavaScript绑定**:Cocos2d-x如何将C++底层库与JavaScript结合,提供JSB(JavaScript Bindings),让开发者能够使用JavaScript编写游戏逻辑。 3. **图形渲染**:学习如何使用Cocos2d-x的绘图API,包括纹理、...
cocos2d-x是一个基于MIT许可证的开源游戏引擎,它以快速、简单且功能强大的特性闻名,允许开发者使用C++、Lua和JavaScript进行跨平台开发,支持包括iOS、Android、Windows Phone、Blackberry以及Tizen在内的多个平台...
cocos2d-x实战 c++卷教程及完整源码下载,使用最新cocos2d-x-3.14版本,在xcode7.3上已编译通过。 解决相关问题 1、解决源程序在高版本上无法编译问题 2、解决源程序中文注释部分,xcode上显示乱码问题 3、根据书籍...
【cocos2d-x源码素材】是一套用于学习cocos2d-x游戏开发的代码资源,它在Windows平台上使用Visual Studio 2010进行编译并通过了测试。这个资源包涵盖了多个重要的游戏开发技术,包括碰撞检测、瓦片地图(Tile Map)...