zoukankan      html  css  js  c++  java
  • cocos2d-x 网络请求

    【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,包括在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.   
    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 客户机传递给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 格数据类型,预先定义的约束,没有必要遵从。

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



  • 相关阅读:
    Android中TextView中内容不换行的解决方法
    对ORA-01795: 列表中的最大表达式数为 1000的处理(算法:计算数量及切割)
    poj 1094 Sorting It All Out (拓扑排序)
    Automatically generate serial number in abap
    Getting started with new I/O (NIO)--reference
    JDK源码重新编译——支持eclipse调试JDK源码--转载
    Reactor构架模式--转载
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载
    深入分析 iBATIS 框架之系统架构与映射原理--转载
    Servlet 工作原理解析--转载
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5035594.html
Copyright © 2011-2022 走看看