青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

我的玻璃盒子

【原創】TinyJSON使用介紹

引用www.json.org上的對JSON這種數據格式的介紹:
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就是一種基于Javascript的輕量級數據交換格式。它給我的感覺有點類似于xml,但寫法更隨意,并且用途不同。
這篇文章不會介紹JSON本身,因此,如果您首次接觸JSON,請務必先到http://www.json.org/去看完introduction.(這里還有中文版:http://www.json.org/json-zh.html)。

其實操作JSON數據比較方便的還是C#和Java,語句編寫也比較簡單、方便。C++操作JSON數據相對就要復雜一些,但只要理解了JSON這種數據格式,除了代碼字符量大一些以外,操作起來也不是很復雜。

在JSON官網上已經推薦了一些使用C++操作JSON的open source項目,我試用了幾種,最后選擇了TinyJSON。因為它只需要一個.hpp文件,看起來比較輕量級。但無論是哪種,多數C++操作JSON的項目,都需要使用boost,所以,在正式使用TinyJSON之前,你還需要把boost編譯并配置好。我使用的是boost 1.39.0。關于boost的編譯和配置,網上已經有很多介紹的文章了,這里就不再說。

說了一些廢話,下面言歸正傳,來看一下如何使用TinyJSON。

先從簡單的來,比如我們有這樣一段JSON數據:
{ "login_time": 1246068720 }
一目了然,名稱是login_time,值是1246068720。用TinyJSON讀取,代碼就可以這么寫:

 1string strJson = "{ \"login_time\": 1246068720 }";
 2grammar<char>::variant var = parse(strJson.begin(), strJson.end());
 3if(var->type() == typeid(grammar<char>::object))
 4{
 5    grammar<char>::object const& obj = boost::any_cast<grammar<char>::object>(*var);
 6    for(grammar<char>::object::const_iterator it = obj.begin(); it != obj.end(); ++it)
 7    {
 8        std::string strName = (*it).first;//這里你可以讀到名稱“login_time”
 9
10        if((*it).second->type() == typeid(int))
11        {
12            int nValue = boost::any_cast<int>(*(*it).second);//這里將login_time的值讀到一個整型變量里。
13        }

14    }

15}
(注,需要事前定義命名空間:using namespace json;,否則你需要寫成這樣:json::grammer<char>什么什么)

JSON數據基本上都是“名稱-值”這樣的格式,其中“值”有很多類型,比如上面的例子是一個整型,還有字符類型、double、布爾等等。并且“值”不限于這些,還可以是一個數組,甚至又是一段JSON數據。

下面舉個“值”是數組的例子,比如這樣的一段JSON數據:
{ "auto_harvest": [26,28,25] }
相應的讀取代碼如下:
 1string strJson = "{ \"auto_harvest\": [26,28,25] }";
 2grammar<char>::variant var = parse(strJson.begin(), strJson.end());
 3if(var->type() == typeid(grammar<char>::object))
 4{
 5    grammar<char>::object const& obj = boost::any_cast<grammar<char>::object>(*var);
 6    for(grammar<char>::object::const_iterator it = obj.begin(); it != obj.end(); ++it)
 7    {
 8        std::string strName = (*it).first;    //這里讀到名稱“auto_harvest”
 9
10        if((*it).second->type() == typeid(grammar<char>::array))
11        {
12            //這是一個數組類型,下面循環解析里面所有的元素
13            grammar<char>::array const & a = boost::any_cast<grammar<char>::array>(*(*it).second);
14            for(grammar<char>::array::const_iterator ita = a.begin(); ita != a.end(); ++ita)
15            {
16                if((*ita)->type() == typeid(int))
17                {
18                    nValue = boost::any_cast<int>(*(*ita));    //這里會讀到每一個數組元素
19                }

20            }

21        }

22    }

23}

再來一段“值”是另外一段JSON的例子,比如你拿到的JSON數據是這樣的:
{ "server_now": 1246117129.8, "return_code": 0, "params": {"rekoo_killer": "123456"} }
我們可以將上面的JSON數據分為“兩級”,如下:

server_now : 1246117129.8 (第一級)
return_code : 0 (第一級)
param : (第一級)
      rekoo_killer : 123456 (第二級)

其中rekoo_killer : 123456是param的“值”,而rekoo_killer : 123456本身又可以單獨看做一段獨立的JSON數據,它在TinyJSON中被作為一個object類型。
用TinyJSON解析上面的JSON數據,代碼可以這樣寫:

 1string strJson = "{ \"server_now\": 1246117129.8, \"return_code\": 0, \"params\": {\"rekoo_killer\": \"123456\"} }";
 2grammar<char>::variant var = parse(strJson.begin(), strJson.end());
 3if(var->type() == typeid(grammar<char>::object))
 4{
 5    grammar<char>::object const& obj = boost::any_cast<grammar<char>::object>(*var);
 6    for(grammar<char>::object::const_iterator it = obj.begin(); it != obj.end(); ++it)
 7    {
 8        std::string strName = (*it).first;
 9
10        if((*it).second->type() == typeid(int))
11        {
12            int nValue = boost::any_cast<int>(*(*it).second);    //讀到return_code的值0
13        }

14        else if((*it).second->type() == typeid(double))
15        {
16            double dValue = boost::any_cast< double >(*(*it).second);    //讀到server_now的值1246117129.8
17        }

18        else if((*it).second->type() == typeid(std::string))
19        {
20            std::string strValue = boost::any_cast< std::string >(*(*it).second);
21        }

22        else if((*it).second->type() == typeid(bool))
23        {
24            bool bValue = boost::any_cast< bool >(*(*it).second);
25        }

26        else if((*it).second->type() == typeid(grammar<char>::object))
27        {
28            //params的值會進入這個判斷語句來
29
30            grammar<char>::object const & o = boost::any_cast<grammar<char>::object>(*(*it).second);
31            for(grammar<char>::object::const_iterator oo = o.begin(); oo != o.end(); ++oo)
32            {
33                std::string strName = (*oo).first;    //這里讀到了名稱rekoo_killer
34
35                //下面怎么做我就不寫了,rekoo_killer的值就是一個整型
36            }

37        }

38        else if((*it).second->empty())
39        {
40            AfxMessageBox(_T("it's a null value"));
41        }

42        else
43        {
44            AfxMessageBox(_T("unknown type!"));
45        }

46    }

47}

相信經過上面的介紹,各位已經對如何使用TinyJSON來讀取一段JSON數據有所了解了。

posted on 2009-08-05 11:56 深藍色系統 閱讀(5717) 評論(6)  編輯 收藏 引用 所屬分類: 皮皮片片

評論

# re: 【原創】TinyJSON使用介紹 2009-08-05 15:59 不戒大師

終于等到了,看了之后 終于不迷糊了,感覺始終是沒有C#的方便啊。
我稍加封裝了一下,免強好用一點了
http://www.5xp.net/Article/9.aspx  回復  更多評論   

# re: 【原創】TinyJSON使用介紹 2009-08-05 20:10 chentan

chrome 里面提供的json非常好用, 不依賴boost  回復  更多評論   

# re: 【原創】TinyJSON使用介紹 2009-08-06 09:05 遠古毛利人

不錯,不知道是不是基于Spirit的,樓主是否介意我把它轉摘到cppprog.com里?我的這個網站專門收集各種C++庫的應用文章。謝謝!  回復  更多評論   

# re: 【原創】TinyJSON使用介紹 2009-08-11 23:14 深藍色系統

@遠古毛利人
可以轉載。不過你的網站似乎有些問題,我在家里可以訪問,在公司就不行。不知道怎么回事。你的網站不錯,挺好的,我也看到了一些我感興趣的技術文章。  回復  更多評論   

# re: 【原創】TinyJSON使用介紹 2009-08-16 13:14 遠古毛利人

非常感謝,因為最近服務器因“原始人”托管商跑路換了而換了IP,DNS服務器也改了一下,所以有點地方可能要等ISP更新DNS緩存才行。  回復  更多評論   

# re: 【原創】TinyJSON使用介紹 2009-09-07 14:15 true

淺顯易懂  回復  更多評論   

導航

<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

統計

常用鏈接

留言簿(75)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久999精品免费| 久久三级视频| 中文精品一区二区三区| 欧美国产另类| 欧美一区二区私人影院日本| 国产精品免费小视频| 亚洲一区中文| 久久精选视频| 欧美一级播放| 鲁大师成人一区二区三区| 在线观看av不卡| 免费观看欧美在线视频的网站| 美女视频黄免费的久久| 999亚洲国产精| 午夜精品久久久久久久久久久| 国产偷国产偷精品高清尤物| 媚黑女一区二区| 国产精品伦子伦免费视频| 一区二区三区日韩在线观看| 亚洲伊人伊色伊影伊综合网| 欧美伊人久久久久久久久影院| 久久超碰97中文字幕| 99精品久久| 麻豆精品视频在线| 国产精品久久毛片a| 免费91麻豆精品国产自产在线观看| 免费日韩av电影| 老司机免费视频一区二区三区| 欧美精品日韩www.p站| 久久精品盗摄| 国产欧美日本| 性欧美大战久久久久久久免费观看| 激情综合中文娱乐网| 久久99在线观看| 久久久欧美一区二区| 国产麻豆91精品| 久久福利影视| 乱码第一页成人| 韩国女主播一区二区三区| 久久gogo国模啪啪人体图| 久久久精品日韩欧美| 国产一区二区久久久| 国产欧美日本一区视频| 久久国产精品亚洲77777| 欧美电影免费观看高清| 亚洲小说欧美另类婷婷| 国产欧美精品日韩区二区麻豆天美| 亚洲综合色噜噜狠狠| 中日韩美女免费视频网址在线观看 | 日韩一级裸体免费视频| 亚洲视频自拍偷拍| 欧美经典一区二区三区| 亚洲一区二区三区在线观看视频| 免费亚洲一区| 午夜精品久久久久久久99水蜜桃 | 樱桃成人精品视频在线播放| 欧美日韩a区| 欧美精品在线播放| 欧美黄色日本| 欧美日韩免费在线| 欧美精品一区二区在线观看 | 一区二区三区四区国产| 国内精品视频666| 一本一本a久久| 欧美一区在线视频| 久久久久88色偷偷免费| 噜噜噜91成人网| 在线视频精品一区| 欧美精品激情在线观看| 亚洲免费视频成人| 欧美在线三级| 国内综合精品午夜久久资源| 亚洲国产欧美久久| 在线精品高清中文字幕| 欧美jizzhd精品欧美巨大免费| 欧美大片免费| 久久精品午夜| 亚洲精品一品区二品区三品区| 美女精品视频一区| 亚洲国产国产亚洲一二三| 国产精品美女久久久| 亚洲国产精品成人精品| 欧美午夜精品久久久| 亚洲在线成人| 免费91麻豆精品国产自产在线观看| 国产女同一区二区| 欧美婷婷久久| 久久影院亚洲| 久久久另类综合| 国产精品99久久久久久久女警 | 久热精品视频| 国产精品三级久久久久久电影| 欧美福利小视频| 亚洲乱码国产乱码精品精98午夜| 国产精品一区久久久久| 久久伊人一区二区| 黄色在线成人| 久久中文字幕一区| 国产精品视频专区| 久久人人爽国产| 麻豆国产精品va在线观看不卡| 欧美aa国产视频| 亚洲精品国产精品乱码不99| 在线观看91久久久久久| 亚洲欧美一区二区激情| 91久久精品www人人做人人爽| 亚洲——在线| 亚洲国产高清一区| 国产麻豆综合| 国产精品日本精品| 欧美日本网站| 久久久久国产精品一区| 午夜精品久久久久久久蜜桃app | 久久人人九九| 在线一区视频| 极品少妇一区二区三区| 国产视频一区在线| 亚洲国产午夜| 亚洲香蕉网站| 欧美在线一二三区| 性xx色xx综合久久久xx| 日韩午夜电影| 欧美日韩国产限制| 久久亚洲综合色一区二区三区| 狠狠干综合网| 欧美激情精品久久久久久变态| 亚洲毛片播放| 欧美黑人国产人伦爽爽爽| 一区久久精品| 久久人人爽人人爽爽久久| 羞羞视频在线观看欧美| 欧美激情第8页| 久热综合在线亚洲精品| 亚洲激情国产| 欧美韩日一区| 国产精品欧美一区喷水| 国产亚洲精品7777| 久久亚洲国产精品日日av夜夜| 久久av最新网址| 美女免费视频一区| 亚洲美女毛片| 99热这里只有成人精品国产| 欧美亚洲不卡| 欧美成人dvd在线视频| 国产午夜亚洲精品羞羞网站 | 亚洲欧美一区二区激情| 亚洲伊人伊色伊影伊综合网| 亚洲精品欧美激情| 久久婷婷国产麻豆91天堂| 欧美三级视频在线观看| 99精品国产热久久91蜜凸| 亚洲蜜桃精久久久久久久| 国产精品成人一区二区网站软件| 亚洲伦理在线| 亚洲伊人网站| 在线观看日韩专区| 国产精品99久久不卡二区| 国内精品免费在线观看| 欧美高清视频一二三区| 欧美二区在线看| 久久不射中文字幕| 亚洲欧美日本国产有色| 欧美日韩一区二区三区四区在线观看| 经典三级久久| 农村妇女精品| 久久aⅴ国产欧美74aaa| 亚洲国产成人av| 久久综合精品一区| 一区二区激情| 欧美激情亚洲激情| 在线亚洲欧美视频| 亚洲成色精品| 欧美日韩精品欧美日韩精品| 麻豆精品一区二区av白丝在线| 日韩亚洲一区在线播放| 国产一区二区三区自拍| 香蕉乱码成人久久天堂爱免费 | 久久成人国产| 免费久久久一本精品久久区| 国产综合色产| 亚洲香蕉网站| 久久精品女人| 亚洲视频中文字幕| 一区二区视频在线观看| 韩日在线一区| 亚洲日本欧美天堂| 欧美视频在线免费| 裸体丰满少妇做受久久99精品| 亚洲一区精彩视频| 亚洲人成人一区二区三区| 欧美色欧美亚洲另类二区| 亚洲国产精品电影在线观看| 激情国产一区| 91久久精品国产| 亚洲午夜一区二区三区| 国产乱码精品一区二区三区不卡| 欧美亚洲免费| 亚洲日本aⅴ片在线观看香蕉| 99精品久久久| 在线精品在线|