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"}

JSON优缺点

总结:

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。

使用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:{    "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:  {  "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;}

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雄是个程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值