成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

更好更快更高效解析JSON說明

開發
最近在用QT寫一個小軟件,途中遇到了解析JSON的問題,坎坷之路,總結出一些經驗,一定要與大家分享一下。先介紹下JSON的使用。

現在來一個實例解析類,直接就把解析JSON到QVariant去了。唯一不足的是沒有搞錯誤處理,具體方法也請各位自行參考json-c的發行文檔,這樣比較方便敘述,STL或者Boost我都沒有認真接觸過,不方便寫。

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

話說JSON在Web上應用得非常不錯,XML雖然想法很好,但是冗長,解析又麻煩。而JSON作為Javascript的字符描述語言,根本不用手動解析,直接交給Javascript,Eval便可得到結果。而PHP 5.2 以上,更內置了JSON的解析函數,一個函數便把PHP的對象轉換為JSON,比XML來得快得多、方便得多(話說PHP干對象的Serialize和Unserialize是它的強項  )。

今天本文就來說說在C和C++上如何來讀取JSON。實際上解析JSON是比較簡單的,難點在于讀取。另外,以QT為例,這樣比較方便敘述,STL或者Boost我都沒有認真接觸過,不方便寫。#t#

現在JSON解析庫滿天飛,沒有必要再自己寫個了,除非是商業程序  。我試過JsonCPP, QJson, Json-Spirit, jaula等C++的庫。遇到總總問題,有不支持中文(UTF-8編碼也不行)、不方便在Windows下編譯、體積過于臃腫等毛病,最終的選擇是C庫json-c,因為Google看到一篇文章對JSON的各個C庫的優點比較,說Json-C兼容性最好,而且支持中文(使用UTF-8)。


編譯仍然不是很方便,需要使用configure和GCC。這樣就需要MSYS或者Cygwin了,各位Windows大大需要編譯的話,勞請各位自己Google,安裝最基本的MSYS或者Cygwin,以便使用Bash。另外,MinGW也是必不可少的啦,因為要用GCC和Make嘛。

如若在C++下使用C的庫,頭文件需要特殊處理,解析JSON因為C編譯器及C++編譯器編譯出來的中間代碼的符號不一致,如若不經處理,最后在鏈接的時候定會出現找不到符號的問題。以下是C++的代碼:

  1. #include <QString> 
  2. #include <QList> 
  3. #include <QMap> 
  4.    
  5. extern "C"{  
  6. #include <stdio.h> 
  7. #include <stdlib.h> 
  8. #include <json.h> 
  9. #include <json_object.h> 
  10. #include <json_tokener.h> 
  11. }  
  12.    
  13. .....  
  14. // 忽略上下文的其它代碼,關注我們要的解析方法  
  15.    
  16. // 1) 解析數組  
  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 ); /* 此時的Obj是一個Array */  
  22. for(int i=0 ; i<json_object_array_length(obj) ; i++ ){  
  23.     temp_obj = json_object_array_get_idx(obj, i ); /* 獲取數組的第 i 個元素,作為 temp_obj 保存 */  
  24.     switch( json_object_get_type( temp_obj ) {  /* 判斷 temp_obj 的類型 */  
  25.       case json_type_string:  /* 若是字符串 */  
  26.         data.append( json_object_get_string(temp_obj) )  
  27.       break;  
  28.    
  29.       case json_type_int: /* 若是整數 */  
  30.         data.append( json_object_get_in(temp_obj) )  
  31.       break;  
  32.    
  33.       default: /* 其它的類型先不管了 */  
  34.       break;  
  35.     }  
  36.  }  
  37. }  
  38.    
  39. // 2) 解析對象  
  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: /* 若是整數 */  
  53.         data.insert( key, json_object_get_in(value) )  
  54.       break;  
  55.    
  56.       default: /* 其它的類型先不管了 */  
  57.       break;  
  58.  }  
  59. ... 
責任編輯:chenqingxiang 來源: 互聯網
相關推薦

2024-10-15 10:47:12

2024-01-01 18:57:01

Code技巧符號

2017-09-04 17:50:12

2019-04-19 08:18:37

神經網絡數據圖形

2010-01-06 14:24:40

Javascript解

2009-12-30 10:46:01

Ubuntu目標

2010-02-06 10:54:38

Android進程

2020-10-22 10:17:27

敏捷性高級合伙人CIO

2024-12-20 16:41:22

2010-02-02 13:59:11

Python編寫

2010-02-03 09:27:21

編寫Python程序

2010-02-03 17:51:42

Ubuntu Linu

2015-01-26 10:38:53

企業級WLAN

2016-09-18 20:19:01

LinuxVimGitHub

2017-12-21 14:36:10

大數據健身智慧

2018-05-08 14:58:07

戴爾

2010-01-20 17:32:16

C++函數

2010-01-14 16:35:31

C++優化

2012-12-07 13:19:01

打印企業

2010-01-26 09:40:23

C++代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲在线视频 | 天天射美女| 久久精品视频在线观看 | 亚洲精品第一 | h视频在线观看免费 | 麻豆久久久久久久 | 久久99精品国产自在现线小黄鸭 | 国产1区2区 | 国产精品18毛片一区二区 | 成人精品国产一区二区4080 | 日韩欧美三区 | 美女视频黄的免费 | 99免费精品视频 | 鸳鸯谱在线观看高清 | 色性av | 毛片毛片毛片毛片毛片 | 亚洲一区二区三区在线播放 | 国产毛片毛片 | 国产精品精品视频一区二区三区 | 99亚洲 | 亚洲视频第一页 | 日韩三级| 亚洲精品一区av在线播放 | 欧美一级在线观看 | 国产精品精品视频一区二区三区 | 午夜寂寞影院列表 | 中文字幕在线三区 | 国产一区二区 | 九九久久精品 | 欧洲尺码日本国产精品 | 亚洲成人一区二区在线 | 一区在线视频 | 你懂的av| 国产农村妇女精品一二区 | 免费在线观看av网站 | 欧美欧美欧美 | 国产精品久久7777777 | 国产丝袜一区二区三区免费视频 | 精品国产一区二区国模嫣然 | 国产乱码精品1区2区3区 | 国产一区二区三区四区在线观看 |