您好,登錄后才能下訂單哦!
本篇內容主要講解“JSON怎么封裝數據和解析數據”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JSON怎么封裝數據和解析數據”吧!
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,它基于JavaScript的一個子集,易于人的編寫和閱讀,也易于機器解析。JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。
JSON由兩種結構組成:
1.鍵值對的無序集合——對象(或者叫記錄、結構、字典、哈希表、有鍵列表或關聯數組等)
2.值的有序列表——數組
這些都是常見的數據結構。事實上大部分現代計算機語言都以某種形式支持它們。這使得一種數據格式在同樣基于這些結構的編程語言之間交換成為可能。
JSON中的形式:
對象是一個無序鍵值對的集合,以"{"開始,同時以"}"結束,鍵值對之間以":"相隔,不同的鍵值對之間以","相隔,舉例
{ "key1" : 1, "key2" : "string"}
總結:
1.占帶寬小(格式是壓縮的)
2. js通過eval()進行Json讀取(便于客戶端讀取)
3. JSON支持多種語言(c、c++、PHP等),便于服務端解析
JSON (JavaScript Object Notation) 的輕量級數據交換格式能夠替代XML的工作.
優點:
1. 數據格式比較簡單, 易于讀寫, 格式都是壓縮的, 占用帶寬小
2. 易于解析這種語言, 客戶端javascript可以簡單的通過eval()進行JSON數據的讀取
3. 支持多種語言, 包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, php, Python, Ruby等語言服務器端語言, 便于服務器端的解析
4. 在PHP世界, 已經有PHP-JSON和JSON-PHP出現了, 便于PHP序列化后的程序直接調用. PHP服務器端的對象、數組等能夠直接生JSON格式, 便于客戶端的訪問提取. 另外PHP的PEAR類已經提出了支持 (http://pear.php.net/pepr/pepr-proposal-show.php?id=198)
5. 因為JSON格式能夠直接為服務器端代碼使用, 大大簡化了服務器端和客戶端的代碼開發量, 但是完成的任務不變, 且易于維護
缺點:
1. 沒有XML格式這么推廣的深入人心和使用廣泛, 沒有XML那么通用性2. JSON格式目前在Web Service中推廣還屬于初級階段PS: 據說Google的Ajax是使用 JSON+模板 做的
老鐵,這個json格式,沒毛病,提示是不是很直接。。。。。。。哈哈。
使用C++和別的語言做交互比較常用的一種數據操作方式就是json。可以到GitHub上下載對應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
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": ""}
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怎么封裝數據和解析數據”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。