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

Jsonajax領域很流行,記得當時看過它的介紹后很興奮,網(wǎng)上找了一些解析jsonc

 

c++代碼,不過沒有找到特別好的,有的寫得不錯不過要依賴于boost,有的用c寫的不大好用,好在json語法簡單,參考了一些c/c++json解析代碼做了一個json類,最近又把去年寫的json類修改為unicode下使用,增了一些功能,現(xiàn)在CJsonw可以解析const char *型輸入,也可解析const wchar_t *型輸入,可解析ansi編碼、unicode編碼、utf8編碼的json文件。看看我的CJsonw定義:

 

        JsonwType type;                     //Json類型, true false null直接由類型表示了

        DWORD tag;                            //tag,用戶自用值,默認為0

        union

        {

                struct{

                        wchar_t *cstring;//字符串型值

                        int clen;            //cstring按照字符計算的分配個數(shù),包括可能的0

                };

                double dvalue;          //double

                struct

                {

                        int ivalue;         //int

                        DWORD dwhigh;       //高部

                };

                __int64 i64value;        //int64

                OBJS *objs;                     //對象型值

                ARRAYS *arrays;             //數(shù)組型值

        };

Sizeof(CJsonw) == 16

OBJS類型描述無序的key-value型數(shù)據(jù),ARRAYS描述 array型有序數(shù)據(jù),定義如下:

        typedef CHashiW<CJsonw *, CJsonw *> OBJS;

        typedef std::vector<CJsonw *> ARRAYS;

支持以下構造函數(shù):

        CJsonw(JsonwType t=json_null);

        CJsonw(int value);

        CJsonw(__int64 value);

        CJsonw(float value);

        CJsonw(double value);

        CJsonw(const wchar_t *value);

        //數(shù)組型構造函數(shù)

        CJsonw(int *numbers, int count);

        CJsonw(__int64 *numbers, int count);

        CJsonw(float *numbers, int count);

        CJsonw(double *numbers, int count);

        CJsonw(const wchar_t **strings, int count);

支持以下賦值函數(shù):

        bool setnull();

        bool set(bool value);

        bool set(int value);

        bool set(__int64 value);

        bool set(float value);

        bool set(double value);

        bool set(const wchar_t *value);

        bool set(int *numbers, int count);

        bool set(__int64 *numbers, int count);

        bool set(float *numbers, int count);

        bool set(double *numbers, int count);

        bool set(const wchar_t **strings, int count);

       

        //修改常規(guī)值,就是true, false, int, real, string

        bool setbystring(const wchar_t *value);

 

支持以下輸入:

        bool parse(const char *string);

        bool parse(const wchar_t *string);

        bool parsefile(FILE *fp);

        bool parsefile(LPCTSTR filename);

文件可以ansi編碼、unicode編碼、或者utf8編碼

 

支持以下wchar_t型輸出:

        //dump,默認為unicode編碼

        //uunicode表示字符串中的unicode字符是否按照\uxxxx格式輸出

        //bDisptrue按照友好格式顯示,會輸出\t換行等方便閱讀

        //bDispfalse按照緊湊模式顯示,沒有多余字符,方便網(wǎng)絡傳輸?shù)葓龊?/span>

        bool dump(CBlockBuffer *pbk, bool bNameQuotes=true, bool uunicode=false, bool bDisp=true);

        //跟上面的dump一樣,但如果成功會在buf里面插入一個'\0'字符

        bool dump0(CBlockBuffer *pbk, bool bNameQuotes=true, bool uunicode=false, bool bDisp=true);

        bool save(LPCTSTR filename);

        bool save(FILE *fp);

保存到文件默認為UNICODE格式

 

支持以下ANSI型輸出:

        //a系列dumpansi編碼輸出

        //bDisptrue按照友好格式顯示,會輸出\t換行等方便閱讀

        //bDispfalse按照緊湊模式顯示,沒有多余字符,方便網(wǎng)絡傳輸?shù)葓龊?/span>

        bool dumpa(CBlockBuffer *pbk, bool bNameQuotes=true, bool uunicode=true, bool bDisp=true);

        //跟上面的dump一樣,但如果成功會在buf里面插入一個'\0'字符

        bool dumpa0(CBlockBuffer *pbk, bool bNameQuotes=true, bool uunicode=true, bool bDisp=true);

ANSI型輸出主要用在節(jié)省網(wǎng)絡帶寬或者和其他系統(tǒng)交換數(shù)據(jù)的情況下。

 

支持以下類型判別函數(shù):

        //類型判別函數(shù)

        bool IsArray() const { return type==json_array; }

        bool IsObject() const { return type==json_object; }

        bool IsInt() const { return type==json_int; }

        bool IsReal() const { return type==json_real; }

        bool IsNumber() const { return IsInt()||IsReal(); }

        bool IsNull() const { return type==json_null; }

        bool IsTrue() const { return type==json_true; }

        bool IsFalse() const { return type==json_false; }

        bool IsString() const { return type==json_string; }

 

支持以下一些直接取值函數(shù):

        const wchar_t *getordef(const wchar_t *strdef)

        int getordef(int idef)

        __int64 getordef(__int64 idef)

        double getordef(double ddef)

        bool getordef(bool bdef)

        //array的元素

        CJsonw *get(int n)

        CJsonw *operator[](int n) const

        //obj的元素

        CJsonw *get(const wchar_t *name)

        CJsonw *operator[](const wchar_t *name) const

 

支持以下取array型子元素數(shù)據(jù)的函數(shù):

        const wchar_t *getordef(int n, const wchar_t *strdef)

        int getordef(int n, int idef)

        __int64 getordef(int n, __int64 idef)

        double getordef(int n, double ddef)

        bool getordef(int n, bool bdef)

 

支持以下取obj型子元素數(shù)據(jù)的函數(shù):

        const wchar_t *getordef(const wchar_t *name, const wchar_t *strdef)

        int getordef(const wchar_t *name, int idef)

        __int64 getordef(const wchar_t *name, __int64 idef)

        double getordef(const wchar_t *name, double ddef)

        bool getordef(const wchar_t *name, bool bdef)

 

支持以下obj遍歷函數(shù):

        //遍歷函數(shù),最常見寫法:

        //for(CJsonw::OBJIT *p=xxx.FirstObj(); p; p=p->next())...

        OBJIT *firstobj()

 

        //arrayobject元素個數(shù),string類型返回分配的字符個數(shù)(包括可能的),其他類型都返回

        int size() const

 

另外支持一些增加array子元素函數(shù):

        bool add(CJsonw *pnode)

        bool del(int n, bool bfree=true)

        bool addnull(){ return add(new CJsonw(json_null)); }

        bool addtrue(){ return add(new CJsonw(json_true)); }

        bool addfalse(){ return add(new CJsonw(json_false)); }

        bool add(int value){ return add(new CJsonw(value)); }

        bool add(__int64 value){ return add(new CJsonw(value)); }

        bool add(float value){ return add(new CJsonw(value)); }

        bool add(double value){ return add(new CJsonw(value)); }

        bool add(const wchar_t *value){ return add(new CJsonw(value)); }

 

也支持obj增加刪除子對象函數(shù):

        bool addobj(const wchar_t *name, CJsonw *pnode)

        bool delobj(const wchar_t *name, bool bfree=true)

        bool addobjnull(const wchar_t *name){ return addobj(name, new CJsonw(json_null)); }

        bool addobjtrue(const wchar_t *name){ return addobj(name, new CJsonw(json_true)); }

        bool addobjfalse(const wchar_t *name){ return addobj(name, new CJsonw(json_false)); }

        bool addobj(const wchar_t *name, int value){ return addobj(name, new CJsonw(value)); }

        bool addobj(const wchar_t *name, __int64 value){ return addobj(name, new CJsonw(value)); }

        bool addobj(const wchar_t *name, float value){ return addobj(name, new CJsonw(value)); }

        bool addobj(const wchar_t *name, double value){ return addobj(name, new CJsonw(value)); }

        bool addobj(const wchar_t *name, const wchar_t *value){ return addobj(name, new CJsonw(value)); }

 

還有一些特殊函數(shù):

        //計算整個樹的crc

        DWORD calccrc();

        //計算整個樹的md5,要求md5不少于個字節(jié)

        byte *calcmd5(byte *md5);

        //計算hex表示的md5,不寫尾部,要求md5hex不少于個字符

        char *calcmd5hex(char *md5hex, const byte x='x');

        //計算hex表示的md5,寫尾部,要求md5hex不少于個字符

        char *calcmd5hex0(char *md5hex, const byte x='x');

 

 

json類上花了較多時間,主要是覺得這個類很有用,可以描述任意對象,易保存易傳輸易構造,對速度要求不苛刻的應用程序用json作為基本數(shù)據(jù)結構很合適,配合json里面的data自定義字段理論上支持描述任意對象,配合使用一些cache可擴大json類的使用范圍,用它取代ini xml等配置簡直是大材小用,用json類來做stringtable簡直就是小菜一碟,而且還是hash級高效率,絲毫不比手工做一個hash_map<,>表差。

在實際應用中,去年有一個網(wǎng)絡驗證的項目就大量使用了這個類,配置、幫助都是json格式,應用中管理大量對象的內(nèi)存數(shù)據(jù)庫也是用了json類,編碼后直接網(wǎng)上傳輸,server內(nèi)部也是一個json對象直接管理了大量用戶的信息,非常方便,可以說用json類使得這個程序少寫了大量代碼,也使得整個項目只用了1個月時間就做出來了,還部署成master – master- slave(N)模式穩(wěn)定運行了將近1年時間。

在另一些網(wǎng)絡應用中,俺將json格式數(shù)據(jù)作為變長包使用,前面俺寫過一篇短文介紹了變長包最常見的幾種格式,分別是:

1、 key\0value\0…

2、 json格式

3、 xml格式

使用json格式作為變長包現(xiàn)在很流行,這也是大量ajax所采用所依賴的技術,qq種菜,google搜索預列表都是采用json格式的。

Posted on 2010-10-03 14:17 袁斌 閱讀(928) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美激情1区2区| 午夜精品视频| 欧美怡红院视频| 亚洲一区二区三区高清不卡| 久久久午夜视频| 欧美在线一二三四区| 欧美日韩国产成人精品| 欧美电影在线免费观看网站| 国产精品自拍小视频| 这里只有精品视频| aaa亚洲精品一二三区| 欧美国产精品一区| 欧美国产日本在线| 在线日韩av片| 久久久国产精品一区二区三区| 久久综合一区二区| 久久久噜噜噜久久人人看| 欧美日韩黄色一区二区| 亚洲国产另类精品专区| 亚洲国产精品小视频| 久久久噜噜噜久久中文字幕色伊伊| 国产一区二区三区在线观看精品 | 久久久精品一区| 国产精品国产三级国产| 日韩一区二区精品葵司在线| 一区二区三区 在线观看视| 欧美大片一区二区三区| 亚洲国产欧美在线人成| 亚洲精品国产精品乱码不99按摩| 一本色道久久88精品综合| 一区二区三区 在线观看视频| 亚洲一区二区在线观看视频| 亚洲综合首页| 国产精品欧美在线| 亚洲综合色在线| 欧美在线亚洲在线| 雨宫琴音一区二区在线| 久久蜜桃香蕉精品一区二区三区| 中国日韩欧美久久久久久久久| 欧美一区二区大片| 老司机成人网| 日韩小视频在线观看专区| 欧美日韩精品久久久| 亚洲午夜av在线| 久久亚洲综合色| 亚洲麻豆视频| 国产精品一区二区三区久久| 午夜精品免费在线| 美脚丝袜一区二区三区在线观看| 国产精品久久久久久久9999| 西西裸体人体做爰大胆久久久| 日韩天堂在线观看| 国产精品久久久久久av下载红粉 | 欧美一区二区福利在线| 久久影视三级福利片| 亚洲黄色片网站| 欧美日韩精品免费看 | 亚洲一区二区三区欧美| 久久精品99| 亚洲精品日韩久久| 国产日韩成人精品| 欧美ed2k| 欧美一级网站| 日韩天堂在线视频| 免费黄网站欧美| 亚洲免费在线观看| 亚洲国产高清在线| 国产精品久久久久高潮| 久久婷婷国产综合国色天香| 一本大道久久a久久精二百| 久久亚洲精品伦理| 亚洲欧美一区二区在线观看| 亚洲东热激情| 国产一区二区三区四区五区美女| 欧美亚洲网站| 艳妇臀荡乳欲伦亚洲一区| 久久精品官网| 亚洲尤物在线视频观看| 亚洲人成亚洲人成在线观看| 国产三级精品三级| 国产精品a久久久久| 免费视频一区二区三区在线观看| 欧美大片免费| 欧美一区二区在线观看| 一区二区三区视频观看| 亚洲精品麻豆| 亚洲国产成人不卡| 国产在线麻豆精品观看| 国产精品理论片| 欧美视频二区36p| 欧美乱大交xxxxx| 欧美成人午夜| 久久综合五月| 久久精品视频在线观看| 欧美一级午夜免费电影| 亚洲欧美韩国| 亚洲一区二区三区久久| 在线一区二区三区做爰视频网站 | 小黄鸭视频精品导航| 日韩亚洲视频在线| 亚洲免费观看高清完整版在线观看熊 | 国产精品热久久久久夜色精品三区 | 久久天天狠狠| 欧美专区第一页| 欧美一区二区三区日韩视频| 亚洲欧美日韩综合一区| 亚洲在线一区二区| 亚洲宅男天堂在线观看无病毒| 韩国福利一区| 亚洲福利电影| 91久久精品美女| 亚洲看片一区| 一本色道综合亚洲| 亚洲综合国产激情另类一区| 亚洲一区二区视频| 亚洲欧美影音先锋| 久久国产精品毛片| 鲁大师影院一区二区三区| 欧美刺激性大交免费视频| 亚洲第一页自拍| 亚洲人成在线观看一区二区| 亚洲乱码久久| 亚洲一区二区三区在线视频| 欧美一区免费| 乱人伦精品视频在线观看| 欧美高清hd18日本| 欧美日韩免费看| 国产伦精品一区二区三区高清| 欧美电影免费观看高清| 欧美日韩极品在线观看一区| 国产精品草莓在线免费观看| 国产欧美一区二区三区久久人妖| 欧美成人在线免费观看| 欧美日韩另类在线| 国产精品进线69影院| 精品69视频一区二区三区| 亚洲日本成人在线观看| 亚洲中午字幕| 欧美91精品| 99精品久久免费看蜜臀剧情介绍| 欧美成人精品福利| 亚洲精品国精品久久99热一| 亚洲一区国产一区| 免费亚洲一区二区| 国产精品久久一卡二卡| 红桃视频一区| 亚洲永久字幕| 欧美成人首页| 亚洲性人人天天夜夜摸| 久久亚洲国产成人| 欧美性视频网站| 最新国产精品拍自在线播放| 亚洲特黄一级片| 欧美va天堂在线| 午夜影视日本亚洲欧洲精品| 欧美成人精品在线播放| 国产午夜精品一区二区三区视频| 国产精品igao视频网网址不卡日韩| 欧美激情1区| 国内一区二区三区| 亚洲一区免费| 亚洲国产精品高清久久久| 午夜精品亚洲| 欧美日韩国产999| 亚洲国产裸拍裸体视频在线观看乱了| 在线电影一区| 久久精品人人爽| 在线一区日本视频| 欧美激情一区二区三区在线视频观看 | 韩国成人福利片在线播放| 中文av一区二区| 欧美激情91| 欧美在线1区| 国产伦精品一区二区三区四区免费| 国产女主播一区二区三区| 一区二区三区久久网| 欧美成人午夜77777| 欧美中文字幕视频在线观看| 国产精品免费网站| 亚洲伊人观看| 亚洲免费成人av| 欧美日本一区二区三区| 亚洲美女中出| 亚洲福利视频免费观看| 另类综合日韩欧美亚洲| 好吊色欧美一区二区三区视频| 亚洲国产精品ⅴa在线观看| 久久国产精品久久国产精品| 亚洲婷婷在线| 国产精品久久久久久久久| 亚洲欧美怡红院| 亚洲你懂的在线视频| 国产女主播一区二区三区| 久久成人免费电影| 欧美亚洲一级| 亚洲电影第三页| 亚洲激情影院| 欧美精品在线视频| 亚洲视屏一区| 亚洲制服av|