cocos2dx rapidjson 高速解析JSON  --- 【cocos2d-x官方文档】怎样使用CCHttpClient
(泰然网)

数据类型和Json格式

使用CCHttpClient进行cocos2d-x网络编程

Cocos2d-x教程(25)-本地数据加密

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzMyMTMyOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

怎样写入 或者是 怎样 改动已有的json 文件 大神有没有相关的文档 

奋斗  

给我看看即可

奋斗

ball.json 数据例如以下:

[html] view
plain
copy

  1. {
  2. "entities": [
  3. {
  4. "entity": {
  5. "TapOpposite": 0,
  6. "Interval": 0.95,
  7. "BallNum": 1
  8. }
  9. },
  10. {
  11. "entity": {
  12. "TapOpposite": 0,
  13. "Interval": 0.91,
  14. "BallNum": 2
  15. }
  16. },
  17. {
  18. "entity": {
  19. "TapOpposite": 0,
  20. "Interval": 0.95,
  21. "BallNum": 3
  22. }
  23. }
  24. ]
  25. }

在cocos2dx中json的读取是用的rapidjson,包括在cocostudioproject中。所以我们要先引入#include "cocostudio/CocoStudio.h"

  1. void GameWorld::readJson()
  2. {
  3. //json 文档
  4. rapidjson::Document _doc;
  5. bool bRet = false;
  6. ssize_t size = 0;
  7. unsigned char *pBytes = NULL;
  8. do {
  9. pBytes = cocos2d::CCFileUtils::sharedFileUtils()->getFileData("ball.json", "r", &size);
  10. CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);
  11. std::string load_str((const char*)pBytes, size);
  12. CC_SAFE_DELETE_ARRAY(pBytes);
  13. _doc.Parse<0>(load_str.c_str());
  14. CC_BREAK_IF(_doc.HasParseError());
  15. //生成json文档对像
  16. if(!_doc.IsObject())
  17. return;
  18. //是否有此成员
  19. if(!_doc.HasMember("entities"))
  20. return;
  21. // 通过[]取成员值,再依据须要转为array,int,double,string
  22. const rapidjson::Value &pArray = _doc["entities"];
  23. //是否是数组
  24. if(!pArray.IsArray())
  25. return;
  26. for (rapidjson::SizeType i = 0; i < pArray.Size(); i++)
  27. {
  28. const rapidjson::Value &p = pArray[i];
  29. if(p.HasMember("entity"))
  30. {
  31. const rapidjson::Value &valueEnt = p["entity"];
  32. if(valueEnt.HasMember("TapOpposite") && valueEnt.HasMember("Interval") && valueEnt.HasMember("BallNum"))
  33. {
  34. const rapidjson::Value &tapOpposite = valueEnt["TapOpposite"];
  35. int tapOp = tapOpposite.GetInt();      //得到int值
  36. const rapidjson::Value &interval = valueEnt["Interval"];
  37. float inter = interval.GetDouble();  //得到float,double值
  38. const rapidjson::Value &ballNum = valueEnt["BallNum"];
  39. int ball = ballNum.GetInt();      //得到int值
  40. ballParam param;
  41. param.tapOp = tapOp;
  42. param.inter = inter;
  43. param.ballIndex = ball;
  44. m_ballParamVec.push_back(param);
  45. }
  46. }
  47. else
  48. {
  49. return;
  50. }
  51. }
  52. bRet = true;
  53. } while (0);
  54. }

json格式

JSON格式:http://www.json.org/

python和JSON的关系请參考:http://docs.python.org/library/json.html

  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)。

基础演示样例

  简单地说,JSON 能够将 JavaScript 对象中表示的一组数据转换为字符串。然后就能够在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给server端程序。这个字符串看起来有点儿古怪,可是 JavaScript 非常easy解释它。并且 JSON 能够表示比"名称 / 值对"更复杂的结构。

比如。能够表示数组和复杂的对象,而不不过键和值的简单列表。

表示名称 / 值对

  依照最简单的形式。能够用以下这种 JSON 表示"名称 / 值对":

  { "firstName": "Brett" }

  这个演示样例很基本,并且实际上比等效的纯文本"名称 / 值对"占用很多其它的空间:

  firstName=Brett

  可是。当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,能够创建包括多个"名称 / 值对"的 记录。比方:

  { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }

  从语法方面来看,这与"名称 / 值对"相比并没有非常大的优势,可是在这样的情况下 JSON 更easy使用,并且可读性更好。比如。它明白地表示以上三个值都是同一记录的一部分。花括号使这些值有了某种联系。

表示数组

  当须要表示一组值时,JSON 不但可以提高可读性,并且可以降低复杂性。比如。如果您希望表示一个人名列表。在 XML 中,须要很多開始标记和结束标记;如果使用典型的名称 / 值对(就像在本系列前面文章中看到的那种名称 / 值对),那么必须建立一种专有的数据格式,或者将键名称改动为 person1-firstName这种形式。

  假设使用 JSON,就仅仅需将多个带花括号的记录分组在一起:

  { "people": [

  { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

  { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},

  { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

  ]}

  这不难理解。在这个演示样例中。仅仅有一个名为 people的变量。值是包括三个条目的数组,每一个条目是一个人的记录,当中包括名、姓和电子邮件地址。

上面的演示样例演示怎样用括号将记录组合成一个值。

当然。能够使用同样的语法表示多个值(每一个值包括多个记录):

  { "programmers": [

  { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

  { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },

  { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

  ],

  "authors": [

  { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },

  { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },

  { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }

  ],

  "musicians": [

  { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },

  { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }

  ] }

  这里最值得注意的是,可以表示多个值,每一个值进而包括多个值。可是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称 / 值对可以不一样。JSON 是全然动态的,同意在 JSON 结构的中间改变表示数据的方式。

  正在进行中 JSON 格数据类型,预先定义的约束,没有必要遵从。

所以,在相同的数据结构,能够改变这样的数据表示。甚至表示以不同的方式同样的事情。


cocos2d-x 网络请求的更多相关文章

  1. Cocos2d-X多线程(4) 在子线程中进行网络请求

    新版本的android系统已经不允许在UI线程中进行网络请求了,必须新建一个线程. 代码实操: 头文件: #ifndef __TestThreadHttp_SCENE_H__ #define __Te ...

  2. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  3. Android之三种网络请求解析数据(最佳案例)

    AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...

  4. IOS开发之—— 在AFN基础上进行的网络请求的封装

    网络请求的思路:如果请求成功的话AFN的responseObject就是解析好的. 1发送网络请求:get/post/或者别的 带上URL,需要传的参数 2判断后台网络状态码有没有请求成功: 3 请求 ...

  5. Android,适合Restful网络请求封装

    借助volley.Gson类库. 优点 网络请求集中处理,返回值直接为预期的对象,不需要手动反序列,提高效率,使用时建立好model类即可. 使用效果 DataProess.Request(true, ...

  6. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

  7. 阶段一:通过网络请求,获得并解析JSON数据(天气应用)

    “阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 在上一篇阶段一:解析JSON中提到,最近在写一个很简单的天气预报应用.即使功能很简单,但我还是想把它做成一个相对完 ...

  8. NSURLSession网络请求

    个人感觉在网上很难找到很简单的网络请求.或许是我才疏学浅 ,  所有就有了下面这一段 , 虽然都是代码 , 但是全有注释 . //1/获取文件访问路径 NSString *path=@"ht ...

  9. 【Swift】Alamofile网络请求数据更新TableView的坑

    写这篇BLOG前,有些话不得不提一下,就仅当发发恼骚吧... 今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的 ...

  10. 【WP8.1】HttpClient网络请求、进度以及终止

    工作这么长时间,起初还是喜欢用面向程序过程的思路去写代码. 慢慢的才会用面向对象的思路分析.解决问题.也算是一点点进步吧. 最近在做一个下载音乐的功能.用到了HttpClient类. 于是就简单的写了 ...

随机推荐

  1. POJ 2914 Minimum Cut 最小割图论

    Description Given an undirected graph, in which two vertices can be connected by multiple edges, wha ...

  2. cocos3——8.实现初学者指南

    1.采用ClippingNode裁剪范围 写作物接口: function createClipNode(node, stencil, inverted) { var clip_node = new c ...

  3. MIPS台OpenWrt在系统内的路由器Rust应用程序开发

    笔者:Liigo(庄小莉) 迄今:2014年9一个月17日本 (9一个月29日更新,11一个月19日本再次更新.在最后可用更新) 原文链接:http://blog.csdn.net/liigo/art ...

  4. HDoj-2084-号码塔-dp

    号码塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. MFC 将文件拖进对话框获得文件信息

    非常多软件都支持直接将文件拖进去进行处理的功能,详细一点如暴风影音,将视频或者音频文件拖进去就会自己主动開始播放,那么这个功能在MFC上面怎么实现的呢?事实上非常easy,过程例如以下: 第一步:将对 ...

  6. android imageButton 透明图片

    在Android有许多不规则button.例如: 这个时候,我们假设想做成不规则button的话.第一步就是搞一张边缘透明的png图片,然后用src指定到他.这个时候我们会发现,还没有达到要的效果.还 ...

  7. Partition List -- LeetCode

    原题链接: http://oj.leetcode.com/problems/partition-list/  这是一道链表操作的题目,要求把小于x的元素按顺序放到链表前面.我们仍然是使用链表最经常使用 ...

  8. 关于scope_identity()与 @@IDENTITY

    原文:关于scope_identity()与 @@IDENTITY 参考:https://msdn.microsoft.com/zh-cn/library/ms190315.aspx scope_id ...

  9. How to install PL/SQL developer on linux (转)

    PL/SQL developer 在linux上的安装方法工欲善其事必先利其器,PL/SQL和toad对于ORACLE从业人员来说都是很重要的工具,但这些工具都没有linux的发行版,如果要在linu ...

  10. 升级到tomcat8时Artifact SpringMvcDemo:war exploded: Server is not connected. Deploy is not

    The method getDispatcherType() is undefined for the type HttpServletRequest 升级到tomcat8 http://segmen ...