JSON怎么封裝數(shù)據(jù)和解析數(shù)據(jù)

本篇內容主要講解“JSON怎么封裝數(shù)據(jù)和解析數(shù)據(jù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JSON怎么封裝數(shù)據(jù)和解析數(shù)據(jù)”吧!

創(chuàng)新互聯(lián)主打移動網(wǎng)站、成都網(wǎng)站制作、成都網(wǎng)站建設、外貿(mào)營銷網(wǎng)站建設、網(wǎng)站改版、網(wǎng)絡推廣、網(wǎng)站維護、域名與空間、等互聯(lián)網(wǎng)信息服務,為各行業(yè)提供服務。在技術實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務,根據(jù)網(wǎng)站的內容與功能再決定采用什么樣的設計。最后,要實現(xiàn)符合網(wǎng)站需求的內容、功能與設計,我們還會規(guī)劃穩(wěn)定安全的技術方案做保障。

JSON簡介

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

JSON由兩種結構組成:

1.鍵值對的無序集合——對象(或者叫記錄、結構、字典、哈希表、有鍵列表或關聯(lián)數(shù)組等)

2.值的有序列表——數(shù)組

這些都是常見的數(shù)據(jù)結構。事實上大部分現(xiàn)代計算機語言都以某種形式支持它們。這使得一種數(shù)據(jù)格式在同樣基于這些結構的編程語言之間交換成為可能。

JSON中的形式:

對象是一個無序鍵值對的集合,以"{"開始,同時以"}"結束,鍵值對之間以":"相隔,不同的鍵值對之間以","相隔,舉例

{    "key1" : 1,    "key2" : "string"}
J  SON優(yōu)缺點

總結:

1.占帶寬小(格式是壓縮的)

2. js通過eval()進行Json讀?。ū阌诳蛻舳俗x?。?/p>

3. JSON支持多種語言(c、c++、PHP等),便于服務端解析

JSON (JavaScript Object Notation) 的輕量級數(shù)據(jù)交換格式能夠替代XML的工作.

優(yōu)點:

1. 數(shù)據(jù)格式比較簡單, 易于讀寫, 格式都是壓縮的, 占用帶寬小

2. 易于解析這種語言, 客戶端javascript可以簡單的通過eval()進行JSON數(shù)據(jù)的讀取 

3. 支持多種語言, 包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, php, Python, Ruby等語言服務器端語言, 便于服務器端的解析

4. 在PHP世界, 已經(jīng)有PHP-JSON和JSON-PHP出現(xiàn)了, 便于PHP序列化后的程序直接調用. PHP服務器端的對象、數(shù)組等能夠直接生JSON格式, 便于客戶端的訪問提取.   另外PHP的PEAR類已經(jīng)提出了支持 (http://pear.php.net/pepr/pepr-proposal-show.php?id=198)

5. 因為JSON格式能夠直接為服務器端代碼使用, 大大簡化了服務器端和客戶端的代碼開發(fā)量, 但是完成的任務不變, 且易于維護

缺點:

1. 沒有XML格式這么推廣的深入人心和使用廣泛, 沒有XML那么通用性2. JSON格式目前在Web Service中推廣還屬于初級階段PS: 據(jù)說Google的Ajax是使用 JSON+模板 做的

JSON實際使用情況:
在實際調用接口中,傳輸數(shù)據(jù)經(jīng)常會用到json,例如請求騰訊云短信發(fā)送接口,請求參數(shù)數(shù)據(jù)格式就是json,如下圖:

JSON怎么封裝數(shù)據(jù)和解析數(shù)據(jù)

在實際使用中怎么判斷json格式是否正確呢?百度JSON在線工具,直接校驗,如下圖:

JSON怎么封裝數(shù)據(jù)和解析數(shù)據(jù)

老鐵,這個json格式,沒毛病,提示是不是很直接。。。。。。。哈哈。

C++ 使用Json封裝數(shù)據(jù)和解析數(shù)據(jù)

使用C++和別的語言做交互比較常用的一種數(shù)據(jù)操作方式就是json??梢缘紾itHub上下載對應C++的json庫源碼,我自己下了一套之前的版本,可以正常使用。jsoncpp-src

編譯出來的庫名:json_vc71_libmtd.lib(debug) | json_vc71_libmt.lib(release)

需要包含的頭文件:jsoncpp-src(對應源碼)/include/json (該目錄下所有文件)

調用庫方式
#include "json/json.h"#ifdef _DEBUG#pragma comment(lib,"./lib/json_vc71_libmtd.lib")#else#pragma comment(lib,"./lib/json_vc71_libmt.lib")#endif
封裝json數(shù)據(jù)為string
方法1:
std::string DataToJson(){    Json::FastWriter writerinfo;    Json::Value  writevalueinfo;    writevalueinfo["id"]=abc123;       writevalueinfo["time"]="2020.04.26 00:00:00";
   Json::Value  writedata;    writedata["count"] = 1;    writedata["name"] = "cpp";
   writevalueinfo["data"]=writedata;
   std::string strEmail = writerinfo.write(writevalueinfo);    return strEmail;}
示例json://公眾號:C與C語言plus{    "data": {        "count": 1,        "name": "cpp"    },    "id": abc123,    "time": "2020.04.26 00:00:00"}

方法2(直接拼接):

CString strTempData;msg_content =  ” 1號設備水位超過閾值報警”;cstrsha256 =  “20823c7cf53e97898f39f212b9dbee960220b3fa272c884c62f1f3fe6af56f38”;strmobile =  “ 13004091102”;strtime =  “1587711951 ”;strTempData.Format("{\"tpl_id\": %ld,\"params\":\[ \"%s\"\],\"playtimes\": %d,\"sig\": \"%s\",\"tel\":\{\"mobile\":\"%s\",\"nationcode\":\"%d\"\},\"time\": %ld, \"ext\":\"\"\}",568369,msg_content,2,cstrsha256,strmobile,86,strtime);
示例json:  //公眾號:C與C語言plus{  "tpl_id": 568369,  "params": ["1號設備水位超過閾值報警 "],  "playtimes": 2,  "sig": "20823c7cf53e97898f39f212b9dbee960220b3fa272c884c62f1f3fe6af56f38",  "tel": {    "mobile": "13004091102",    "nationcode": "86"  },  "time": 1587711951,  "ext": ""}
解析json數(shù)據(jù)
void TranslateJson(const string strData){    // 解析json用Json::Reader    Json::Reader *readerinfo = new Json::Reader(Json::Features::strictMode());    // Json::Value是一種很重要的類型,可以代表任意類型。如int, string, object, array...    Json::Value root;           if (readerinfo->parse(strData, root))    {        if (root["id"].isInt())        {            int nID = root["id"].asInt();        }        if (root["time"].isString())        {            std::string strTime = root["time"].asString();        }        if (root["data"]["count"].isInt())        {            int nDataCount = root["data"]["count"].asInt();        }
       if (root["data"]["name"].isString())        {            std::string strDataName = root["data"]["name"].asString();        }
   }    ::delete readerinfo;    readerinfo = NULL;}

到此,相信大家對“JSON怎么封裝數(shù)據(jù)和解析數(shù)據(jù)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

網(wǎng)站名稱:JSON怎么封裝數(shù)據(jù)和解析數(shù)據(jù)
網(wǎng)頁路徑:http://muchs.cn/article38/jpjssp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計用戶體驗、網(wǎng)站策劃靜態(tài)網(wǎng)站、網(wǎng)站設計公司、面包屑導航

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計