- 浏览: 273407 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 2061#include "stdafx.h" # ... -
C语言字节对齐示例
2014-09-23 16:44 731#include "stdafx.h" ... -
(转)C语言字节对齐
2014-09-23 16:16 680文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但 ... -
C++ stl中remove的实现
2013-09-24 23:14 939原文:http://www.cplusplus.com/ref ... -
(转)c++ explicit构造函数
2013-09-11 18:51 663按照默认规定,只有一 ... -
(转)string替换所有指定字符串(C++)
2013-07-27 17:01 1854C++的string提供了replace方法来实现字符串的替换 ... -
C++哲学
2013-01-10 20:34 811即:只为用到的东西付出代价。 -
jni文件传递方法参数
2012-11-26 17:43 5557使用jni从java传递多个参数到c++时,如果是多个参数,当 ... -
(转)C++ string类的一些函数方法
2012-10-24 14:41 833string类的构造函数: string(const char ... -
CCTMXTiledMap使用的几个事项
2012-08-02 11:12 7279项目中的地图层采用coco ... -
android平台移植总结
2012-07-30 13:11 2684最近完成了一款游戏的android平台移植,从ios平台移植到 ... -
(转)子类重新父类方法的限制
2012-07-23 15:17 903若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要 ... -
(装)NDK Build 参数
2012-07-17 16:20 2759'ndk-build' Overview ndk-build ... -
(转)在VS2005下使用libjson注意事项
2012-07-17 15:31 1661最近项目中要使用libjson,无奈boost下的1.34版的 ... -
c++ 字符串的一些概念
2012-06-13 00:16 1131今天看到《c++ primer》上 ... -
c++ vector方法push_back的新理解
2012-05-25 11:57 0写了上篇文章 对c++方法返回对象的理解(对c++方法返回对象 ... -
对c++方法返回对象的理解
2012-05-25 11:51 1132今天更深刻的认识到了通过方法返回一个对象或者数组是不可以的,因 ... -
C/C++ 指针删除的几个细节
2012-05-23 15:44 8803在C/C++中,当指针需要删除时,对于new的指针,调用del ... -
(转)C语言深入浅出可变参数函数的使用技巧
2012-05-23 15:04 951深入浅出可变参数函数的使用技巧本文主要介绍可变参数的函数使用, ... -
ios c++ 调用oc代码
2012-05-08 14:12 9184今天照猫画虎的用c++调用了一段oc代码,需要注意的一点是为了 ...
相关推荐
Cocos2d-x 2.2.x Json解析Demo 无需引入jsoncpp库 相关博文地址:http://blog.csdn.net/u012945598/article/details/17398925
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
cocos2d-x-2.1.5
在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...
资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...
Cocos2d-x是移动跨平台开发最流行的游戏引擎,而本书是一本很全面的、比较‘接地气’的游戏开发教程。书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关...
cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...
cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip
精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发
这是我重新弄的cocos2d-x-3.0的类图.之前别人兄台弄的,有些不全面,有些地方错误.我这个可以说是最新的了.每个类添加了中文的详细注解,同时也添加了中文的类名称翻译.这样对cocos2d-x-3.0的框架比较好上手. 有兴趣的...
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...
Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。
Cocos2d-x windows vs2010 配置图文详解
Cocos2d-x游戏编程——C++篇(电子工业出版社,徐飞 著)书本配套的光盘代码,
Cocos2d-x实战 JS卷 Cocos2d-JS开发 PDF 电子书完整版本
cocos2d-x 动画工具 Flash2Cocos2d-x 1.3
cocos2d-x 3.0 人物行走 . 包里有代码和 图片资源.
Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签