Json_接收与解析(C++)
来源:互联网 发布:兼职淘宝美工工资 编辑:程序博客网 时间:2024/03/29 04:38
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值便可。
- Json_接收与解析(C++)
- Json_接收与解析(C++)
- JSON_模式(Schema)与数据解析
- Android中解析JSON_通过GSON(1)
- Android中解析JSON_通过GSON(2)
- JSON_总结
- JSON_笔记
- socket 的发送与接收缓冲区解析
- iphone objective-c解析xml字符串(接收格式参照上篇 webservie xml字符串传值)
- 【问题-java-json】josn的发送与接收(全)解析json对象与字符串在js中的区别,以及后端spring该如何接收?
- [C++] 经典练习题与解析(一)
- [C++] 经典练习题与解析(二)
- Thrift源码系列----4.数据的解析与发送、接收
- Parsing JSON_(MyMoviesWithHttpClient)
- JSON_基础知识总结
- C#引用c++DLL结构体数组注意事项(数据发送与接收时)
- C#引用c++DLL结构体数组注意事项(数据发送与接收时)
- C语言中.c与.h文件解析(转贴)
- 观察者模式 observer
- uva11198
- 网络流与线性规划24题09方格取数问题
- ExpandableListView用法
- HDU 4267 A Simple Problem with Integers
- Json_接收与解析(C++)
- 学JAVA必须知道:抽象类与接口的区别
- 判断自己的电脑是否被入侵
- 带参数宏定义和函数的区别
- 解决popupwindow中弹出输入法被挤上去 顶起的bug
- vi/vim缩进,注释,替换,查找,修改, 跳转
- 第五周项目三:长方柱类
- Failed to load libGL.so的解决方法
- 解决win7下安装Mysql卡在Start service的问题