在第二步中我们学会了请求服务端,并且正确的打印了服务端返回的数据,下面我们开始学习怎么处理服务端下发的数据。本例服务端返回的是一个sting类型的json格式数据。接下来我们将学会如何解析json格式数据。
cocos2dx 使用curl库与php服务端通信
代码示例:链接: https://pan.baidu.com/s/1ge92ydH 密码: yj7j
首先我们先分析下我们的json数据。
我们从返回的json数据来看,我们一共有6条数据。每条数据有三个部分,每个部分都是一个键值对。
这里我们同样用cocos2dx给我们提供的rapidjson库来解析json格式的数据。
首先,在HelloWorldScene.h头文件添加json的引用头文件。
#include "json/rapidjson.h"
#include "json/document.h"
然后我们新建一个CurlReadJson类来实现内容的接收和转换。
这里我直接贴 代码。
//CurlReadJson.h
//CurlReadJson.cpp
这个类的功能很简单。主要功能还在调用的地方。
我们在HelloWorldScene.h里,添加一个数据解析的方法InitListByServerData用来拆分单个的json数据。m_map_server_list用来把拆分的json数据保存为客户端需要的数据。
一个oneUpdate方法来更新一次界面显示,把visibleSize,origin改成全局的声明。
这些做好了,首先我们来实现具体的功能代码。
1、处理服务端返回的字符串流,实现单个json数据的拆分。
rapidjson::Document documentRecive;用来转换接收的数据。因为服务端返回给我们的数据虽然是json看起来是json格式的,但是类型是string类型的。通过这些代码我们的数据就会被拆分成单个的json类型的数据了。然后我们在用InitListByServerData方法来实现单个json数据的解析。
这里CurlReadJson类处理单个的内容数据,然后加入到m_map_server_list里。
然后我们来测试下m_map_server_list里值对不对,在我们创建的oneUpdate方法里实现测试数据。
然后我们在menuCloseCallback方法里执行一次调度器。
this->scheduleOnce(schedule_selector(HelloWorld::oneUpdate), 1.0f);//回调更新
下面我们来测试下能不能正确的在游戏窗口显示我们的服务端数据。
数据正常的显示了,大家看看怎么样。