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

我的玻璃盒子

【原創(chuàng)】TinyJSON使用介紹

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

簡(jiǎn)單地說,JSON就是一種基于Javascript的輕量級(jí)數(shù)據(jù)交換格式。它給我的感覺有點(diǎn)類似于xml,但寫法更隨意,并且用途不同。
這篇文章不會(huì)介紹JSON本身,因此,如果您首次接觸JSON,請(qǐng)務(wù)必先到http://www.json.org/去看完introduction.(這里還有中文版:http://www.json.org/json-zh.html)。

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

在JSON官網(wǎng)上已經(jīng)推薦了一些使用C++操作JSON的open source項(xiàng)目,我試用了幾種,最后選擇了TinyJSON。因?yàn)樗恍枰粋€(gè).hpp文件,看起來比較輕量級(jí)。但無論是哪種,多數(shù)C++操作JSON的項(xiàng)目,都需要使用boost,所以,在正式使用TinyJSON之前,你還需要把boost編譯并配置好。我使用的是boost 1.39.0。關(guān)于boost的編譯和配置,網(wǎng)上已經(jīng)有很多介紹的文章了,這里就不再說。

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

先從簡(jiǎn)單的來,比如我們有這樣一段JSON數(shù)據(jù):
{ "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的值讀到一個(gè)整型變量里。
13        }

14    }

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

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

下面舉個(gè)“值”是數(shù)組的例子,比如這樣的一段JSON數(shù)據(jù):
{ "auto_harvest": [26,28,25] }
相應(yīng)的讀取代碼如下:
 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            //這是一個(gè)數(shù)組類型,下面循環(huán)解析里面所有的元素
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));    //這里會(huì)讀到每一個(gè)數(shù)組元素
19                }

20            }

21        }

22    }

23}

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

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

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

 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的值會(huì)進(jìn)入這個(gè)判斷語句來
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的值就是一個(gè)整型
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}

相信經(jīng)過上面的介紹,各位已經(jīng)對(duì)如何使用TinyJSON來讀取一段JSON數(shù)據(jù)有所了解了。

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

評(píng)論

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

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

# re: 【原創(chuàng)】TinyJSON使用介紹 2009-08-05 20:10 chentan

chrome 里面提供的json非常好用, 不依賴boost  回復(fù)  更多評(píng)論   

# re: 【原創(chuàng)】TinyJSON使用介紹 2009-08-06 09:05 遠(yuǎn)古毛利人

不錯(cuò),不知道是不是基于Spirit的,樓主是否介意我把它轉(zhuǎn)摘到cppprog.com里?我的這個(gè)網(wǎng)站專門收集各種C++庫的應(yīng)用文章。謝謝!  回復(fù)  更多評(píng)論   

# re: 【原創(chuàng)】TinyJSON使用介紹 2009-08-11 23:14 深藍(lán)色系統(tǒng)

@遠(yuǎn)古毛利人
可以轉(zhuǎn)載。不過你的網(wǎng)站似乎有些問題,我在家里可以訪問,在公司就不行。不知道怎么回事。你的網(wǎng)站不錯(cuò),挺好的,我也看到了一些我感興趣的技術(shù)文章。  回復(fù)  更多評(píng)論   

# re: 【原創(chuàng)】TinyJSON使用介紹 2009-08-16 13:14 遠(yuǎn)古毛利人

非常感謝,因?yàn)樽罱?wù)器因“原始人”托管商跑路換了而換了IP,DNS服務(wù)器也改了一下,所以有點(diǎn)地方可能要等ISP更新DNS緩存才行。  回復(fù)  更多評(píng)論   

# re: 【原創(chuàng)】TinyJSON使用介紹 2009-09-07 14:15 true

淺顯易懂  回復(fù)  更多評(píng)論   

導(dǎo)航

<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

統(tǒng)計(jì)

常用鏈接

留言簿(75)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99国产精品久久| 久久国产66| 妖精视频成人观看www| 伊人春色精品| 一区二区三区我不卡| 精品动漫3d一区二区三区| 国产精品美女主播在线观看纯欲| 欧美精品久久久久久久免费观看 | 欧美在线亚洲在线| 久久超碰97人人做人人爱| 久久精品免费观看| 欧美成人在线免费视频| 亚洲精品老司机| 亚洲区在线播放| 亚洲综合精品自拍| 久久精品噜噜噜成人av农村| 欧美激情国产日韩精品一区18| 欧美性jizz18性欧美| 国内精品美女av在线播放| 亚洲黄色视屏| 亚洲自拍三区| 欧美福利视频在线| 国产精品99久久久久久白浆小说 | 美女在线一区二区| 一区二区三区高清视频在线观看| 久久久精品国产免大香伊| 欧美黄污视频| 国模私拍一区二区三区| 一本大道久久精品懂色aⅴ| 欧美伊人久久大香线蕉综合69| 麻豆亚洲精品| 亚洲一品av免费观看| 欧美刺激性大交免费视频| 国产精品乱人伦中文| 亚洲精品视频中文字幕| 欧美专区在线观看| 夜夜夜久久久| 久热精品视频| 国产亚洲精品福利| 亚洲性av在线| 亚洲激情六月丁香| 久久青草久久| 国产在线拍偷自揄拍精品| 亚洲日本中文字幕免费在线不卡| 欧美中文在线免费| 中文亚洲欧美| 欧美日韩视频| 9色国产精品| 亚洲国产99| 久久久噜噜噜久噜久久 | 国产精品视频免费观看www| 日韩视频一区二区三区| 你懂的视频一区二区| 欧美怡红院视频| 国产视频在线观看一区二区| 亚洲在线观看免费视频| 一区二区三区日韩在线观看| 欧美日韩国产三区| 99这里只有精品| 夜夜精品视频一区二区| 欧美性久久久| 欧美一区午夜视频在线观看| 亚洲私人影院在线观看| 欧美日韩在线不卡| 中日韩视频在线观看| 日韩视频一区二区在线观看 | 亚洲国产精品视频| 欧美freesex交免费视频| 久久婷婷国产综合精品青草| 在线免费观看日韩欧美| 欧美成人在线免费观看| 欧美黑人在线观看| 一区二区三区www| 国产精品99久久久久久宅男| 国产精品videosex极品| 欧美一区二区视频在线| 欧美一区二区三区精品电影| 国产亚洲第一区| 裸体一区二区| 欧美理论在线| 亚欧美中日韩视频| 久久精品国产亚洲a| 亚洲国产成人久久| 亚洲每日更新| 国产精品亚洲综合一区在线观看| 欧美中文字幕久久| 欧美国产日本高清在线| 亚洲男女自偷自拍| 久久精品女人的天堂av| 亚洲精品一区久久久久久| 一本色道综合亚洲| 一区二区在线观看视频| 亚洲激情成人| 国产日韩欧美a| 亚洲国产日韩综合一区| 国产精品久久久久久久电影| 免费看av成人| 欧美视频一区| 欧美激情亚洲国产| 国产日韩综合一区二区性色av| 老牛嫩草一区二区三区日本| 欧美精品自拍| 久久色在线播放| 欧美视频一区二区三区…| 美女国产精品| 国产精品影视天天线| 欧美高清在线视频| 国产农村妇女精品一二区| 亚洲国产精品久久精品怡红院| 国产精品区免费视频| 亚洲国产精品一区二区尤物区| 国产亚洲精品美女| 亚洲一区二区网站| 亚洲精品免费在线| 久久久久9999亚洲精品| 欧美在线观看视频在线 | 欧美伦理91i| 麻豆国产精品va在线观看不卡| 欧美四级在线观看| 欧美国产日韩精品| 激情久久久久久久久久久久久久久久| 99人久久精品视频最新地址| 亚洲片区在线| 久久亚洲高清| 久久天堂av综合合色| 国产欧美一区二区色老头| 国产精品99久久久久久人| 日韩视频在线免费| 免费观看在线综合| 欧美不卡高清| 尤物视频一区二区| 欧美中文字幕在线观看| 久久精品中文字幕一区二区三区| 国产精品第三页| 亚洲午夜激情网页| 午夜精品久久久久久99热| 国产精品久久婷婷六月丁香| 99国产精品久久| 亚洲香蕉在线观看| 国产精品日韩久久久| 亚洲欧美日本日韩| 久久久久久自在自线| 国模一区二区三区| 久久久久国产精品厨房| 欧美+亚洲+精品+三区| 亚洲国产成人在线| 免费视频一区二区三区在线观看| 亚洲黄色在线视频| 在线视频亚洲欧美| 国产精品久久久久久久久免费樱桃 | 亚洲视频日本| 国产精品成人在线观看| 亚洲淫片在线视频| 午夜精品久久久久久久99热浪潮| 国产精品qvod| 欧美一级夜夜爽| 欧美大片在线观看一区| 日韩一区二区精品| 国产欧美视频一区二区三区| 欧美一区三区三区高中清蜜桃| 久久伊人一区二区| 99国产精品私拍| 国产精品激情电影| 久久久久久亚洲精品不卡4k岛国| 亚洲国内自拍| 亚洲一区二区视频在线| 国产精品亚洲成人| 久久久噜噜噜久噜久久| 99精品热视频| 久久久久欧美精品| 宅男66日本亚洲欧美视频| 国产精品外国| 欧美精品在线一区| 欧美自拍偷拍午夜视频| 国内精品亚洲| 欧美日韩视频在线第一区| 欧美专区亚洲专区| 日韩视频一区二区三区在线播放免费观看| 久久精彩视频| 亚洲图片在区色| 亚洲激情在线播放| 国产日韩专区| 欧美日韩一区二区在线观看视频| 欧美专区18| 亚洲一区二区三区在线| 欧美国产91| 久久精品国产成人| 亚洲综合国产激情另类一区| 亚洲高清视频在线观看| 久久免费午夜影院| 校园春色综合网| 日韩一级片网址| 亚洲国产另类久久久精品极度| 国产精品一区二区三区四区| 欧美日韩成人一区二区三区| 久久精品国产精品亚洲| 欧美与黑人午夜性猛交久久久| 亚洲一区二区欧美日韩| 99视频+国产日韩欧美| 亚洲精品综合在线|