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

Jsonajax領(lǐng)域很流行,記得當(dāng)時看過它的介紹后很興奮,網(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,用戶自用值,默認(rèn)為0

        union

        {

                struct{

                        wchar_t *cstring;//字符串型值

                        int clen;            //cstring按照字符計(jì)算的分配個數(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;

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

        CJsonw(JsonwType t=json_null);

        CJsonw(int value);

        CJsonw(__int64 value);

        CJsonw(float value);

        CJsonw(double value);

        CJsonw(const wchar_t *value);

        //數(shù)組型構(gòu)造函數(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,默認(rèn)為unicode編碼

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

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

        //bDispfalse按照緊湊模式顯示,沒有多余字符,方便網(wǎng)絡(luò)傳輸?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);

保存到文件默認(rèn)為UNICODE格式

 

支持以下ANSI型輸出:

        //a系列dumpansi編碼輸出

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

        //bDispfalse按照緊湊模式顯示,沒有多余字符,方便網(wǎng)絡(luò)傳輸?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)絡(luò)帶寬或者和其他系統(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型子元素?cái)?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型子元素?cái)?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ù):

        //計(jì)算整個樹的crc

        DWORD calccrc();

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

        byte *calcmd5(byte *md5);

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

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

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

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

 

 

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

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

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

1、 key\0value\0…

2、 json格式

3、 xml格式

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

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

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            亚洲一区二区三区视频| 亚洲理论在线观看| 欧美精品情趣视频| 久久一区二区三区av| 国产精品白丝av嫩草影院| 亚洲国产精品黑人久久久| 国产精品网站在线播放| 亚洲精品国产视频| 亚洲日本成人| 久久伊伊香蕉| 久久久久久久91| 国产精品一二三| 亚洲一区二区三区精品在线观看 | 久久xxxx精品视频| 亚洲欧美日韩视频二区| 欧美日韩免费观看一区三区| 亚洲电影第1页| 亚洲日本欧美在线| 欧美激情中文字幕乱码免费| 你懂的国产精品| 亚洲福利久久| 老色鬼精品视频在线观看播放| 久久久久一区二区三区四区| 国产九九精品视频| 午夜天堂精品久久久久| 欧美一区高清| 国产日韩在线播放| 久久成人18免费观看| 久久永久免费| 91久久黄色| 欧美国产第一页| 一本一道久久综合狠狠老精东影业 | 国产精品久久一卡二卡| 亚洲丝袜av一区| 欧美在现视频| 精品999在线播放| 免费在线观看日韩欧美| 最新成人在线| 亚洲一区在线视频| 国产精品永久入口久久久| 亚洲欧美日韩中文视频| 久久狠狠婷婷| 1024亚洲| 欧美日韩国产免费观看| 在线一区二区三区四区五区| 性欧美大战久久久久久久免费观看| 国产精品夜夜嗨| 久久综合九色99| 亚洲激精日韩激精欧美精品| 这里只有精品视频在线| 国产视频久久久久| 久久综合激情| 一区二区三区四区五区精品视频 | 久久国产主播精品| 91久久中文字幕| 欧美深夜影院| 久久精品一区二区国产| 亚洲国产精品精华液网站| 午夜在线视频观看日韩17c| 在线观看精品一区| 欧美午夜不卡视频| 久久精品一区四区| 日韩香蕉视频| 欧美 日韩 国产在线| 中文久久精品| 亚洲电影免费在线| 国产精品亚洲视频| 欧美激情国产日韩| 欧美在线一二三四区| 99国产精品视频免费观看| 另类人畜视频在线| 亚洲免费在线视频| 亚洲日本电影在线| 激情一区二区三区| 国产精品福利在线观看网址| 久久中文久久字幕| 亚洲欧美日本伦理| 9久草视频在线视频精品| 欧美jizzhd精品欧美喷水 | 久久精品国产精品亚洲精品| 亚洲美女啪啪| 在线观看视频一区| 国产精品尤物| 国产精品黄视频| 欧美激情区在线播放| 久久久久久欧美| 欧美亚洲色图校园春色| 一区二区三区欧美视频| 亚洲国产cao| 欧美激情导航| 媚黑女一区二区| 久久久久久久性| 性色av一区二区三区在线观看| 9国产精品视频| 亚洲人成在线观看网站高清| 一区免费视频| 韩国一区电影| 狠色狠色综合久久| 国产一区二区丝袜高跟鞋图片| 国产精品剧情在线亚洲| 国产精品乱码一区二三区小蝌蚪 | 国产精品一二一区| 国产精品―色哟哟| 国产精品mm| 国产精品黄视频| 国产精品手机在线| 国产精品永久入口久久久| 国产精品日韩在线| 国产欧美日韩视频一区二区三区| 欧美午夜在线视频| 国产精品社区| 国产一区二区三区网站| 精品av久久久久电影| 极品av少妇一区二区| 亚洲电影免费观看高清完整版 | 韩国一区二区三区美女美女秀| 国产在线播放一区二区三区| 国产主播一区二区| 一区在线播放视频| 亚洲国产欧洲综合997久久| 亚洲欧洲一区二区在线播放| 亚洲精品免费在线| 亚洲图片欧洲图片av| 欧美在线关看| 毛片一区二区三区| 亚洲国内精品| 亚洲午夜久久久久久久久电影网| 亚洲一区二区在线播放| 久久精品99国产精品日本| 久久伊人精品天天| 欧美三级精品| 国产在线不卡| 亚洲美女福利视频网站| 亚洲一区二区在线免费观看视频| 欧美一级理论性理论a| 久久婷婷av| 亚洲日本欧美| 亚洲欧美日韩国产一区| 老鸭窝91久久精品色噜噜导演| 欧美日本久久| 国内精品久久久久影院薰衣草| 亚洲国产精品欧美一二99| 亚洲午夜久久久久久尤物| 久久久久国产一区二区| 亚洲国产你懂的| 午夜视频久久久| 欧美日韩成人在线| 好吊妞这里只有精品| 艳女tv在线观看国产一区| 欧美中文在线免费| 最新69国产成人精品视频免费| 午夜亚洲一区| 欧美日韩精品欧美日韩精品一 | 国产美女诱惑一区二区| 亚洲精品一级| 久久久久久久综合色一本| 亚洲精品中文字幕在线观看| 欧美一级理论片| 欧美日韩美女一区二区| 亚洲二区在线观看| 欧美影片第一页| 日韩亚洲欧美精品| 久久亚洲综合色| 国产一区二区| 亚洲自拍三区| 亚洲欧洲视频| 久久久久九九九九| 国产午夜一区二区三区| 一区二区三区日韩在线观看| 欧美大尺度在线| 欧美影院在线| 国产日韩精品视频一区| 亚洲自拍都市欧美小说| 亚洲看片网站| 欧美高清在线视频| 亚洲第一主播视频| 另类春色校园亚洲| 久久国产婷婷国产香蕉| 国产伦精品一区二区三区视频黑人 | 日韩天天综合| 亚洲高清在线| 免费成人小视频| 亚洲电影在线观看| 蜜桃av一区二区在线观看| 久久成人免费网| 国产综合色在线| 久久久久久综合网天天| 午夜性色一区二区三区免费视频| 国产精品色网| 久久国产乱子精品免费女| 亚洲欧美bt| 国产一区二区三区在线观看精品| 午夜在线a亚洲v天堂网2018| 亚洲色图制服丝袜| 国产欧美一级| 久久精品夜色噜噜亚洲a∨| 欧美呦呦网站| 尤物yw午夜国产精品视频明星| 蜜臀久久99精品久久久画质超高清| 久久成人免费网|