本篇內(nèi)容主要講解“JSON怎么封裝數(shù)據(jù)和解析數(shù)據(jù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“JSON怎么封裝數(shù)據(jù)和解析數(shù)據(jù)”吧!
創(chuàng)新互聯(lián)主打移動網(wǎng)站、成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護、域名與空間、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計。最后,要實現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計,我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它基于JavaScript的一個子集,易于人的編寫和閱讀,也易于機器解析。JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言。
JSON由兩種結(jié)構(gòu)組成:
1.鍵值對的無序集合——對象(或者叫記錄、結(jié)構(gòu)、字典、哈希表、有鍵列表或關(guān)聯(lián)數(shù)組等)
2.值的有序列表——數(shù)組
這些都是常見的數(shù)據(jù)結(jié)構(gòu)。事實上大部分現(xiàn)代計算機語言都以某種形式支持它們。這使得一種數(shù)據(jù)格式在同樣基于這些結(jié)構(gòu)的編程語言之間交換成為可能。
JSON中的形式:
對象是一個無序鍵值對的集合,以"{"開始,同時以"}"結(jié)束,鍵值對之間以":"相隔,不同的鍵值對之間以","相隔,舉例
{ "key1" : 1, "key2" : "string"}
總結(jié):
1.占帶寬?。ǜ袷绞菈嚎s的)
2. js通過eval()進行Json讀?。ū阌诳蛻舳俗x取)
3. JSON支持多種語言(c、c++、PHP等),便于服務(wù)端解析
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等語言服務(wù)器端語言, 便于服務(wù)器端的解析
4. 在PHP世界, 已經(jīng)有PHP-JSON和JSON-PHP出現(xiàn)了, 便于PHP序列化后的程序直接調(diào)用. PHP服務(wù)器端的對象、數(shù)組等能夠直接生JSON格式, 便于客戶端的訪問提取. 另外PHP的PEAR類已經(jīng)提出了支持 (http://pear.php.net/pepr/pepr-proposal-show.php?id=198)
5. 因為JSON格式能夠直接為服務(wù)器端代碼使用, 大大簡化了服務(wù)器端和客戶端的代碼開發(fā)量, 但是完成的任務(wù)不變, 且易于維護
缺點:
1. 沒有XML格式這么推廣的深入人心和使用廣泛, 沒有XML那么通用性2. JSON格式目前在Web Service中推廣還屬于初級階段PS: 據(jù)說Google的Ajax是使用 JSON+模板 做的
老鐵,這個json格式,沒毛病,提示是不是很直接。。。。。。。哈哈。
使用C++和別的語言做交互比較常用的一種數(shù)據(jù)操作方式就是json。可以到GitHub上下載對應(yīng)C++的json庫源碼,我自己下了一套之前的版本,可以正常使用。jsoncpp-src
編譯出來的庫名:json_vc71_libmtd.lib(debug) | json_vc71_libmt.lib(release)
需要包含的頭文件:jsoncpp-src(對應(yīng)源碼)/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
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號設(shè)備水位超過閾值報警”;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號設(shè)備水位超過閾值報警 "], "playtimes": 2, "sig": "20823c7cf53e97898f39f212b9dbee960220b3fa272c884c62f1f3fe6af56f38", "tel": { "mobile": "13004091102", "nationcode": "86" }, "time": 1587711951, "ext": ""}
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)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!