温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JSON怎么封装数据和解析数据

发布时间:2021-07-20 10:51:10 来源:亿速云 阅读:173 作者:chen 栏目:大数据

本篇内容主要讲解“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"}
J  SON优缺点

总结:

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实际使用情况:
在实际调用接口中,传输数据经常会用到json,例如请求腾讯云短信发送接口,请求参数数据格式就是json,如下图:

JSON怎么封装数据和解析数据

在实际使用中怎么判断json格式是否正确呢?百度JSON在线工具,直接校验,如下图:

JSON怎么封装数据和解析数据

老铁,这个json格式,没毛病,提示是不是很直接。。。。。。。哈哈。

C++ 使用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
封装json数据为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数据
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怎么封装数据和解析数据”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI