首页 > 其他分享 >常见的数据交换格式:JSON、Proto、XML和YAML

常见的数据交换格式:JSON、Proto、XML和YAML

时间:2024-09-02 09:52:58浏览次数:11  
标签:XML Protocol Proto YAML JSON 数据交换 Buffers

原创 控制工程研习

proto、json、xml和yaml是四种常见的数据交换格式,它们的全称分别是:Protocol Buffers (Proto)、JSON (JavaScript Object Notation) 、XML (Extensible Markup Language) 和 YAML (YAML Ain't Markup Language) 。

Protocol Buffers (Proto)

Protocol Buffers 是 Google 开发的一种灵活、高效、自动化的结构化数据序列化方法,类似于 XML 和 JSON,但更小、更快、更简单。Protocol Buffers 通常用于客户端和服务器之间的通信以及不同语言之间进行数据交换。

特点:

紧凑且快速: Protocol Buffers 使用二进制格式存储数据,比文本格式如 JSON 更紧凑,解析速度也更快。

强类型:数据结构在编译时被定义,并通过生成的代码实现序列化和反序列化。

多语言支持: Google 提供了多种语言的库来支持 Protocol Buffers,包括 C++、Java 和 Python 等。

示例:

// 定义部分省略
message User {
  string username = 1;
  int32 age = 2;
  string email = 3;
  repeated string interests = 4;
}

// 序列化后的二进制表示(伪代码)
// 注意:Protocol Buffers 是二进制格式,这里仅作示意
User user = {
  username: "Alice",
  age: 30,
  email: "[email protected]",
  interests: ["Hiking", "Reading", "Cooking"]
};

JSON (JavaScript Object Notation)

JSON 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于 JavaScript 的一个子集,但如今已经成为一种独立于语言的格式。

特点:

易读性:JSON 以纯文本形式存储数据,便于人类阅读和理解。

通用性:支持几乎所有现代编程语言。

灵活性:JSON 可以表示复杂的数据结构,如对象、数组等。

示例:

{
  "username": "Alice",
  "age": 30,
  "email": "[email protected]",
  "interests": ["Hiking", "Reading", "Cooking"]
}

XML (Extensible Markup Language)

XML 是一种非常灵活的标记语言,用于存储和传输数据。它被设计成独立于任何特定的应用程序,并且可以被用于定义新的标记语言。XML 的设计目标之一是使数据易于人类编写和阅读。

特点:

自描述: XML 文档包含足够的信息来描述自身的结构,这让它成为一种非常强大的数据交换格式。

标准化: XML 有一个严格的标准(W3C XML 1.0 规范),并且有许多相关的标准,如 XSLT、XPath、XQuery 等,用于处理和转换 XML 数据。

广泛支持: 几乎所有的编程语言都支持 XML,许多数据库系统也支持 XML 数据类型。

可扩展: 用户可以定义自己的标签和文档类型定义 (DTD),也可以使用 XML Schema 定义数据结构。

元数据支持: XML 支持元数据,这使得数据更容易被索引和搜索

示例:

<User>
  <username>Alice</username>
  <age>30</age>
  <email>[email protected]</email>
  <interests>
    <interest>Hiking</interest>
    <interest>Reading</interest>
    <interest>Cooking</interest>
  </interests>
</User>

YAML (YAML Ain't Markup Language)

YAML 是另一种用来表示数据序列的格式,旨在使数据易于由人类编写和阅读,同时也易于程序处理。它通常用于配置文件和数据交换。

特点:

可读性强:YAML 使用空白和缩进来表示数据结构,使其看起来非常清晰和整洁。

表达能力强:YAML 支持复杂的嵌套结构,可以表示多种数据类型,如字符串、数字、日期等。

扩展性好:YAML 允许自定义标签,这使得它非常容易扩展以适应特定的应用场景。

示例:

username: Alice
age: 30
email: [email protected]
interests:
  - Hiking
  - Reading
  - Cooking

比较

性能方面:

Protocol Buffers 在性能上最佳,适合高性能和大规模数据交换。

JSON 和 YAML 的性能相当,适用于中小型数据交换。

XML 的性能最低,但在需要高度标准化的场景下仍被使用。

易用性方面:

JSON 最易使用,几乎所有的编程语言都有内置的支持。

YAML 也非常易用,特别适合配置文件和简单的数据交换。

Protocol Buffers 和 XML 在易用性方面稍差,但各有优势。

标签:XML,Protocol,Proto,YAML,JSON,数据交换,Buffers
From: https://www.cnblogs.com/o-O-oO/p/18392196

相关文章

  • 批量维护工具ansible之yaml与剧本playbook
    一.简介ansible的剧本playbook采用yaml语法,通过yaml语法可以轻松地表示和定义复杂的任务和配置,无论是单台还是多台服务器的管理,ansible都能够提供统一的语法来描述和执行操作,能快速地应对变更、部署和升级。二.yaml语法基本0.运行AnsiblePlaybookansible-playbookdeploy.yml1.YAM......
  • 【Internet Protocol】ip介绍,如何组局域网实现远程桌面和文件共享
    @目录1.何为“上网”1.1定义1.2为什么连了WiFi就能上网了?2.ip2.1什么是ip2.2为什么区分广域网和局域网,ip的唯一性2.3如何查看设备的ip2.4什么叫"ping"2.5区分是否两个ip是否在同一局域网2.5.1最稳妥的方式:ip&mask2.5.2最方便的方式:ping2.6ipv4与ipv6的区别3.远程桌面控......
  • Android 读取 XML 文件之 SAX 解析编码模板
    一、SAX解析概述SAX(SimpleAPIforXML)是一种基于事件的XML解析技术,它一边读取XML文件一边解析,占用内存少,适用于大型文件SAX解析器会触发一系列事件,例如,开始解析元素、结束解析元素、遇到字符数据等,我们只需要实现对应的事件处理器来处理这些事件即可二、SAX......
  • PbootCMS生成的sitemap.xml中增加tag标签链接
    打开/apps/home/model/SitemapModel.php,在78行后面增加个指定分类标签调用代码。//指定分类标签调用publicfunctiongetSortTags($scode){$join=array(array('ay_content_sortb','a.scode=b.scode','LEFT'......
  • c++解析xml文件实际应用(增删改查进阶)看完必会
    《c++解析xml文件(增删改查)看完必会》遍历xml所有节点下的数据已经在上一篇文章末尾写道,写法大同小异,资源下载也在上一篇提到,这里就不再提及,这篇博客主要是对上一篇基础知识的运用,如有疑问,可以call我XML解析类#include<iostream>#include<string>#include<string.h>#include......
  • 部署Harbor、部署Docker-compose、YAML文件
    一、Harbor部署1.验证python版本[root@docker2~]#python--version2.安装pip[root@docker2~]#yum-yinstallpython2-pip#由于版本过低,需要对其进行一个升级#更新pip[root@docker2~]#pipinstall--upgradepip3.指定版本号[root@docker2~]#pipinstall--upg......
  • Clickhouse 配置中文详细介绍 第一章 config.xml
    Clickhouse的配置太多且难以理解,花了两天逐步理解每个配置的作用并逐段机翻了一下注释,并增加了如何配置的建议<!--NOTE:Userandquerylevelsettingsaresetupin"users.xml"file.Ifyouhaveaccidentallyspecifieduser-levelsettingshere,serverwo......
  • YOLOv8改进 | 模块缝合 | C2f融合多尺度表征学习模块 【含OD、RTDETR、OBB等yaml文件
    秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • 【阅己书城】Maven setting.xml配置阿里云加速,JDK8编译
    在mavensetting.xml配置文件配置1、配置阿里云镜像<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexusaliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</......
  • D11 kubernetes yaml模板与示例
    》 kubernetes资源的创建、更新、删除等操作均可以使用json或者yaml文件进行操作,更新和删除可以依赖之前的文件进行更改。但是资源清单文件就没那么容易了,k8s的配置项实在是太多,稍微不注意就会犯错。要写好一个yaml文件,需要了解yaml文件的语法,需要整我k8s的各种配置。本文按照k8s......