cocos2d-x 网络请求

来源:互联网 发布:java怎么打99乘法表 编辑:程序博客网 时间:2024/05/11 00:12

【cocos2dx】rapidjson使用方法以及中文显示的解决方法   

cocos2dx 读取json及解析


 

cocos2dx rapidjson 快速解析JSON  --- 【cocos2d-x官方文档】如何使用CCHttpClient (泰然网)

数据类型和Json格式

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

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


如何写入 或者是 如何 修改已有的json 文件 大神有没有相关的文档 
奋斗  
给我看看就行
奋斗  

ball.json 数据如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  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,包含在cocostudio工程中。所以我们要先引入#include "cocostudio/CocoStudio.h"

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  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.   
  17.         if(!_doc.IsObject())  
  18.             return;  
  19.   
  20.         //是否有此成员  
  21.         if(!_doc.HasMember("entities"))  
  22.             return;  
  23.   
  24.         // 通过[]取成员值,再根据需要转为array,int,double,string  
  25.         const rapidjson::Value &pArray = _doc["entities"];  
  26.   
  27.         //是否是数组  
  28.         if(!pArray.IsArray())  
  29.             return;  
  30.   
  31.         for (rapidjson::SizeType i = 0; i < pArray.Size(); i++)  
  32.         {  
  33.             const rapidjson::Value &p = pArray[i];                
  34.             if(p.HasMember("entity"))  
  35.             {  
  36.                 const rapidjson::Value &valueEnt = p["entity"];  
  37.                 if(valueEnt.HasMember("TapOpposite") && valueEnt.HasMember("Interval") && valueEnt.HasMember("BallNum"))  
  38.                 {  
  39.                     const rapidjson::Value &tapOpposite = valueEnt["TapOpposite"];  
  40.                     int tapOp = tapOpposite.GetInt();      //得到int值  
  41.   
  42.                     const rapidjson::Value &interval = valueEnt["Interval"];  
  43.                     float inter = interval.GetDouble();  //得到float,double值  
  44.   
  45.                     const rapidjson::Value &ballNum = valueEnt["BallNum"];  
  46.                     int ball = ballNum.GetInt();      //得到int值  
  47.   
  48.                     ballParam param;  
  49.                     param.tapOp = tapOp;  
  50.                     param.inter = inter;  
  51.                     param.ballIndex = ball;  
  52.                     m_ballParamVec.push_back(param);  
  53.                 }  
  54.             }  
  55.             else  
  56.             {  
  57.                 return;  
  58.             }  
  59.   
  60.         }  
  61.         bRet = true;  
  62.   
  63.     } while (0);  
  64. }

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 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是 JavaScript 很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

表示名称 / 值对

  按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对":

  { "firstName": "Brett" } 

  这个示例非常基本,而且实际上比等效的纯文本"名称 / 值对"占用更多的空间:

  firstName=Brett 

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

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

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

表示数组

  当需要表示一组值时,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 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。



0 0
原创粉丝点击