JSON数据格式的简介


常见的数据交换格式:XML JSON YML

XML

使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。在web serivice应用中,至少就目前来说XML仍有不可动摇的地位。

优点:1.格式统一,符合标准;2.容易进行系统间数据交换、共享;

缺点:1.文件格式庞大、复杂,网络传输占用带宽较大;

      2.需要大量代码来解析XML格式文件,复用性较差;

      3.浏览器间存在差异,IE和其他浏览器对XML解析和操作存在差异;

 

 

JSON

是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python)。这些特性使JSON成为理想的数据交换语言。

 

优点:1.轻量级数据交换格式,用简单的key:value键值对即可标识所有对象关系,不需要过多的标签;
     2.支持压缩,占用带宽小;
     3.易于解析,客户端用JavaScript可以采用面向对象的方式直接获取JSON对象的属性,能直接被客户端使用,减少了客户端开发;

 

缺点:1.没有XML格式这么推广的深入人心和使用广泛, 没有XML那么通用性,出现较晚,还处于推广阶段;
      2.对数据的描述性比XML差;

 

YAML

YAML是一种直观的能够被电脑识别的的数据数据序列化格式; 换种说法,YAML是一种很简单的类似于XML的数据描述语言,语法比XML简单很多。YAML试图用一种比XML更敏捷的方式,来完成XML所完成的任务。但YAML不是XML

 

优点:1.可读性好;2. 和其它脚本语言的交互性好;3. 使用实现语言的数据类型;

      4. 提供了一个一致的信息模型;5. 可以基于流来处理;

      6. 表达能力强,扩展性好;7. 易于实现;

 

缺点:由于兼容性问题,不同语言间的数据流转,建议现在不要用YAML

—————————————————————————————————

以下就详细的来讲讲JSON的数据格式

 

一、数据结构

JSON建构于两种结构:

1. “名称/对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

如:{“username”:”xiaoyang”,

     “passwd”:”123456”

    }

2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

如:{"authors": [

{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },

{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },

{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }

]}

二、数据类型

json 主要包含三种类型的 class:Value、Reader、Writer。

1)Value

基本的初始化

Json::Value root;
    root ["username"] = Json::Value("xiaoming");
    root["passwd"] = Json::Value("123456");
    root["id"] = Json::Value(12);

    std::string username = root["username"].asString();
    std::string passwd = root["passwd"].asString();

    std::string all = root.toStyledString();
printf("%s\n",all.c_str());

结果:

{

   "id" : 12,

   "passwd" : "123456",

   "username" : "xiaoming"

}

2)Reader:解析为JSON形式的变量

 const char* str = "{\"uploadid\": \"UP000000\",\"code\": 100,\"msg\": \"\",\"files\": \"\"}";  

    Json::Reader reader;  
    Json::Value root;  
    if (reader.parse(str, root))  // reader将Json字符串解析到root,root将包含Json里所有子元素  
    {  
        std::string upload_id = root["uploadid"].asString();  // 访问节点,upload_id = "UP000000"  
        int code = root["code"].asInt();    // 访问节点,code = 100 
    }  

3)Writer

查看 json 内容,使用Writer 类即可,Jsoncpp  Json::Writer 类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriterJson::StyledWriterJson::StyledStreamWriter

 



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值