JSON怎么封装数据和解析数据
本篇内容主要讲解"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怎么封装数据和解析数据"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!