Json_接收与解析(C++)

json是一种轻量级的数据结构,相比起XML具有解析效率高等优点。

首先我们看一json的结构如下:

{

     "name":"yokia",

     "age":24

}

结构简洁,name="yokia",age=24,有点像map,这正是我们所需要的。在c++与flex中使用json,我们需要几个额外的包来解析json。

c++中我们使用jsoncpp这个包,flex中我们使用corelib.swc。我们将jsoncpp中的源文件复制到项目,corelib.swc拷到flex项目的libs下。

我们来看c++中的接收代码:

char *buff = (char *)malloc(126);   //缓冲区

int retVal = recv(s,buff,126,0);      //接收数据

buff[retVal] = '\0';                            //增加结束符

string str = buff;                              //将char *类型数据转换成string

JSON::Reader reader;                 //json中的一个读取类

JSON::Value value;                       //json中存储数据类

if(reader.parse(str,value))             //将数据读取到value中
    {
      string name;

  int age;

  if(!value["name"].isNull())   name= value["age"].asString();    //若name不是空,则读取

  if(!value["age"].isNull())    age= value["age"].asInt();               //若age不是空,则读取

  cout<<"name:"<<name<<","<<"age:"<<age<<endl;              //输出name和age

}

至此,我们已将数据解析成json,并进行处理。

上面将buff转成string类型,注意char *仅仅是一个地址,将数据转换成string后,便可以利用jsoncpp中的函数解析成json了。这样,c++只需要知道flex传过来的key值,便可获取value值。

 

 

接下来我们看下flex中的代码,在flex连接c++成功后:

import com.adobe.serialization.json.*;     //导入json包

var jsonObj:Object = new Object();           //Object对象

var jsonStr:String;                                       //String对象
    jsonObj.name = "vigour";                       //赋值
    jsonObj.age = 24;                                   //赋值
    jsonStr = JSON.encode(jsonObj);        //利用JSON的encode方法将Object转换成String类型

var msg:ByteArray=new ByteArray();
    msg.writeUTFBytes(jsonStr);               //设置发送对象

_socket.writeObject(msg);                       //发送数据
    _socket.flush();  

以上我们便将数据发送到c++服务器了。。其中JSON.encode是将Object类型转换成String,当然也有将String转换成Object,那便是JSON.decode(String str),这样便可将c++服务器传来的string转换成flex中的Object。

 

通过以上操作,我们便可实现c++与flex之间利用json进行通信。双方不需要声明任何数据结构,只需要知道KEY值便可
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值