日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
更好更快更高效解析JSON說(shuō)明

現(xiàn)在來(lái)一個(gè)實(shí)例解析類(lèi),直接就把解析JSON到QVariant去了。唯一不足的是沒(méi)有搞錯(cuò)誤處理,具體方法也請(qǐng)各位自行參考json-c的發(fā)行文檔,這樣比較方便敘述,STL或者Boost我都沒(méi)有認(rèn)真接觸過(guò),不方便寫(xiě)。

JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。 易于人閱讀和編寫(xiě)。同時(shí)也易于機(jī)器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition – December 1999的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類(lèi)似于C語(yǔ)言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。

話(huà)說(shuō)JSON在Web上應(yīng)用得非常不錯(cuò),XML雖然想法很好,但是冗長(zhǎng),解析又麻煩。而JSON作為Javascript的字符描述語(yǔ)言,根本不用手動(dòng)解析,直接交給Javascript,Eval便可得到結(jié)果。而PHP 5.2 以上,更內(nèi)置了JSON的解析函數(shù),一個(gè)函數(shù)便把PHP的對(duì)象轉(zhuǎn)換為JSON,比XML來(lái)得快得多、方便得多(話(huà)說(shuō)PHP干對(duì)象的Serialize和Unserialize是它的強(qiáng)項(xiàng)  )。

今天本文就來(lái)說(shuō)說(shuō)在C和C++上如何來(lái)讀取JSON。實(shí)際上解析JSON是比較簡(jiǎn)單的,難點(diǎn)在于讀取。另外,以QT為例,這樣比較方便敘述,STL或者Boost我都沒(méi)有認(rèn)真接觸過(guò),不方便寫(xiě)。#t#

現(xiàn)在JSON解析庫(kù)滿(mǎn)天飛,沒(méi)有必要再自己寫(xiě)個(gè)了,除非是商業(yè)程序  。我試過(guò)JsonCPP, QJson, Json-Spirit, jaula等C++的庫(kù)。遇到總總問(wèn)題,有不支持中文(UTF-8編碼也不行)、不方便在Windows下編譯、體積過(guò)于臃腫等毛病,最終的選擇是C庫(kù)json-c,因?yàn)镚oogle看到一篇文章對(duì)JSON的各個(gè)C庫(kù)的優(yōu)點(diǎn)比較,說(shuō)Json-C兼容性最好,而且支持中文(使用UTF-8)。

編譯仍然不是很方便,需要使用configure和GCC。這樣就需要MSYS或者Cygwin了,各位Windows大大需要編譯的話(huà),勞請(qǐng)各位自己Google,安裝最基本的MSYS或者Cygwin,以便使用Bash。另外,MinGW也是必不可少的啦,因?yàn)橐肎CC和Make嘛。

如若在C++下使用C的庫(kù),頭文件需要特殊處理,解析JSON因?yàn)镃編譯器及C++編譯器編譯出來(lái)的中間代碼的符號(hào)不一致,如若不經(jīng)處理,最后在鏈接的時(shí)候定會(huì)出現(xiàn)找不到符號(hào)的問(wèn)題。以下是C++的代碼:

 
 
  1. #include  
  2. #include  
  3. #include  
  4.    
  5. extern "C"{  
  6. #include  
  7. #include  
  8. #include  
  9. #include  
  10. #include  
  11. }  
  12.    
  13. .....  
  14. // 忽略上下文的其它代碼,關(guān)注我們要的解析方法  
  15.    
  16. // 1) 解析數(shù)組  
  17. char * json_string = " [ 10, 20, \"nice\" ] ";  
  18. struct json_object *obj, *temp_obj;  
  19. QList< QVariant > data;  
  20.    
  21. obj = json_tokener_parse( json_string ); /* 此時(shí)的Obj是一個(gè)Array */  
  22. for(int i=0 ; i(obj) ; i++ ){  
  23.     temp_obj = json_object_array_get_idx(obj, i ); /* 獲取數(shù)組的第 i 個(gè)元素,作為 temp_obj 保存 */  
  24.     switch( json_object_get_type( temp_obj ) {  /* 判斷 temp_obj 的類(lèi)型 */  
  25.       case json_type_string:  /* 若是字符串 */  
  26.         data.append( json_object_get_string(temp_obj) )  
  27.       break;  
  28.    
  29.       case json_type_int: /* 若是整數(shù) */  
  30.         data.append( json_object_get_in(temp_obj) )  
  31.       break;  
  32.    
  33.       default: /* 其它的類(lèi)型先不管了 */  
  34.       break;  
  35.     }  
  36.  }  
  37. }  
  38.    
  39. // 2) 解析對(duì)象  
  40. char * json_string = " { one: \"good\", \"two\":2 } "  
  41. struct json_object *obj, *temp_obj;  
  42. QMap< QString,QVariant > data;  
  43.    
  44. obj = json_tokener_parse( json_string );  
  45. json_object_object_foreach( obj, key, value ){ // 這里的key和Value不需要提前聲明。在宏里作者就給聲明了 -_-|||  
  46.    
  47.  switch( json_object_get_type( value ) {  
  48.       case json_type_string:  /* 若是字符串 */  
  49.         data.insert( key, json_object_get_string(value) )  
  50.       break;  
  51.    
  52.       case json_type_int: /* 若是整數(shù) */  
  53.         data.insert( key, json_object_get_in(value) )  
  54.       break;  
  55.    
  56.       default: /* 其它的類(lèi)型先不管了 */  
  57.       break;  
  58.  }  
  59. ... 

當(dāng)前名稱(chēng):更好更快更高效解析JSON說(shuō)明
分享鏈接:http://m.5511xx.com/article/dhoeiej.html