json及xml简介

json和xml是两种序列化协议,这里作一个简单的介绍,对于这些序列化协议,如果开发时不使用,则不必要弄懂具体使用的细节,但是需要知道其能做什么,怎么组织数据逻辑和这些语言对应的常见开源项目即可。

json

json都是以键值对的形式出现,即key-val的形式。http就是用的json。下面提示几点注意事项:
1.注意key的类型都是string,都是有双引号的。
2.注意空值null不要加引号。bool类型的true和false也不加引号。
3.数组中的值都是val,注意数组可以嵌套对象,比时这整个对象作为val。
4.json不支持注释。
5.数字加了引号,就是字符串。一些高精度的数字,可以用字符串的形式存储,然后让应用层去处理。

cjson

cjson是用于解析json格式文件的包,用C语言实现。有以下几点需要明确:
1.内部使用链表的数据结构,如果内部嵌套了数组或对象,会使用child指针,所以有点类似树的结构。序列化时的遍历类似深度优先遍历。

typedef struct cJSON
{
    struct cJSON *next;
    struct cJSON *prev;
    struct cJSON *child;
    int type;
    char *valuestring;
    int valueint;
    double valuedouble;
    char *string;
} cJSON;

2.valueint已弃用,数值都用valuedouble。

jsoncpp

这是用cpp写的解析包,是key=val的形式,易使用,但是由于有重载,会影响性能。因此c++客户端用jsoncpp,而服务端建议rapidjson。
需要注意,jsoncpp的整型和浮点型的解析不一样。空值的设置要注意Json::nullValue。

xml

xml在本地配置时使用较多,因为可读性较强,还支持一些属性功能。这里提示一下,由于较浪费带宽,网络传输很少使用xml。有以下几点需要注意:
1.因为属性不能存储数据,所以不能全部设成属性。
2.xml可以注释。
3.xml有声明,也是当作节点的方式。

<?xml version="1.0" encoding="UTF-8"?>

4.key可重复,所以在添加节点前先进行一次查找,否则会加入很多重复节点。先find(),如果找到就修改,没找到再添加。
xml在使用的时候,最担心的就是不断添加重复的节点。
5.xml查找只能一个个地找,不能通过索引值,所以如果xml配置行数过多,建议分解成多个文件。
6.xml开发可以使用TinyXML2, 是简单实用的开源的 C++XML 文件解析库,内部也是树的结构。

不同语言的应用场景

1.http api接口:json。
2.本地配置:xml。
3.rpc:protobuf。
4.两个服务器之间通信,也是rpc,如果双方协议还没有商定,可以先用json传输,因为添加删除字段较为方便,如果一开始就用protobuf,添加删除字段就会比较麻烦。协议定下来之后,可以改用protobuf,效率会高一些。
5.还可以使用压缩的方式,如json+gzip。但是,如果对带宽要求不高,不建议使用这种方法,因为解压缩会耗费时间,如果json不太长,就不要使用。这里有个实例,nginx的配置,是在长度达到某个指定值之后才压缩。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值