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值便可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章