YAML和JSON对比

举报
新网工李白 发表于 2021/09/10 00:52:01 2021/09/10
【摘要】 1️⃣YAML是什么干什么的? YAML 是You are my love 的缩写 YAML(YAML Ain’t Markup Language),YAML 是一种简洁的非标记语...

1️⃣YAML是什么干什么的?

YAML 是You are my love 的缩写

在这里插入图片描述

YAML(YAML Ain’t Markup Language),YAML 是一种简洁的非标记语言

1、YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。

2、YAML是一种可读的文本的数据结构,它的设计目标是使人们容易读,程序容易处理。它类似XML,但是比XML简单。广泛用于配置文件,日志文件,跨语言数据共享,对象持久化,复杂的数据结构。

3、YAML 的配置文件后缀为 .yml,如:libai.yml 。

2️⃣JSON是什么干什么的?

JSON(JavaScript Object Notation):JavaScript 对象表示法

1、它不是一种语言,它是一种轻量级的文本数据交换格式。

2、它使用Javascript语法来描述数据对象,但它独立于JavaScript。JSON解析器和JSON库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。

3、它本身是一串字符串,只是它是一串有固定格式的字符串。符合这个数据格式要求的字符串,我们称之为JSON。文件后缀名.json,libai.json.

简单来说JSON是一种数据格式,和数组作用一样,用于存储数据。

在这里插入图片描述

3️⃣JSON 语法规则

JSON 语法是 JavaScript 语法的子集。

JSON 语法衍生于 JavaScript 对象标记法语法

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组

4️⃣YAML语法规则

YAML语法规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 禁止使用tab缩进,只能使用空格键
  • 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级
  • 使用#表示注释
  • 字符串可以不用引号标注

5️⃣YAML、JSON语法对比

对比练习: YAML转化JSON

三种数据结构

1、map,散列表

使用冒号(:)表示键值对,同一缩进的所有键值对属于一个map

示例:

# YAML表示
age : 12
name : huang

# 对应的Json表示
{'age':12,'name':'huang'}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

也可以将一个map写在一行:

# YAML表示
{age:12,name:huang}

# 对应的Json表示
{'age':12,'name':'huang'}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

2、list,数组
使用连字符(-)表示:

# YAML表示
- a
- b
- 12

# 对应Json表示
['a','b',12]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

也可以写在一行:

# YAML表示
[a,b,c]

# 对应Json表示
[ 'a', 'b', 'c' ]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

3、scalar,纯量

数据最小的单位,不可以再分割。

开发搞的少,这个纯量我也是第一次听见。
在这里插入图片描述
纯量是最基本的,不可再分的值,包括:

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期

纯量的基本使用

boolean: 
    - TRUE  #true,True都可以
    - FALSE  #false,False都可以
float:
    - 3.14
    - 6.8523015e+5  #可以使用科学计数法
int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二进制表示
null:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - 哈哈
    - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行会被转化成一个空格
date:
    - 2021-06-20   #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: 
    -  2021-06-20T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

数据结构嵌套

map和list的元素可以是另一个map或者list或者是纯量。由此出现4种常见的数据嵌套

1、map嵌套map

# YAML表示
websites:
 YAML: yaml.org 
 Ruby: ruby-lang.org 
 Python: python.org 
 Perl: use.perl.org 

# 对应Json表示
{ websites: 
   { YAML: 'yaml.org',
     Ruby: 'ruby-lang.org',
     Python: 'python.org',
     Perl: 'use.perl.org' } }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2、map嵌套list

# YAML表示
languages:
 - Ruby
 - Perl
 - Python 
 - c

# 对应Json表示
{ languages: [ 'Ruby', 'Perl', 'Python', 'c' ] }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3、list嵌套list

# YAML表示
-
  - Ruby
  - Perl
  - Python 
- 
  - c
  - c++
  - java

# 对应Json表示

```handlebars
[ [ 'Ruby', 'Perl', 'Python' ], [ 'c', 'c++', 'java' ] ]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

除此以外,还可以如下表示该结构

# 方法2
- - Ruby
  - Perl
  - Python 
- - c
  - c++
  - java

# 方法3
- [Ruby,Perl,Python]
- [c,c++,java]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4、list嵌套map

# YAML表示
-
  id: 1
  name: huang
-
  id: 2
  name: liao

# 对应Json表示
[ { id: 1, name: 'huang' }, { id: 2, name: 'liao' } ]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

6️⃣总结

要简洁同时功能强大,请用YAML, 要在不同语言中交换、共享数据,请用JSON。

在这里插入图片描述
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢未来很长,值得我们全力奔赴更美好的生活✨

文章来源: libai.blog.csdn.net,作者:新网工李白,版权归原作者所有,如需转载,请联系作者。

原文链接:libai.blog.csdn.net/article/details/118069380

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。