Crazyharp

竖琴


  1. 1. 摘要
  2. 2. JSON
    1. 2.1. 本质:数据格式
    2. 2.2. 类型
    3. 2.3. 格式
    4. 2.4. 语法
  3. 3. yaml
    1. 3.1. 类型
    2. 3.2. 格式与语言规范
    3. 3.3. 特殊的变量语法
    4. 3.4. 语法
  4. 4. XML
    1. 4.1. 特点:
    2. 4.2. 语法
    3. 4.3. XML 约束
      1. 4.3.1. DTD 约束
      2. 4.3.2. Schema约束
    4. 4.4. 语法
  5. 5. 总结
  • Home
  • Anime
  • About
  •   

© 2026 Crazyharp

Theme Typography by Makito

Developed by Crazy_Harp

Proudly published with Hexo

标记语言一文速通

Posted at 2026-01-03 Comments 开发 

本文共1.7k字,阅读需要约5分钟

摘要

本文主要一并介绍一些标记类语法,具体而言是 JSON,yaml,xml 三种语言的语法介绍。

JSON

本质:数据格式

json 不是一种编程语言或者技术,而是一种传递数据的格式,这从他的命名之间就能看出来:JavaScript Object Notation。以面向复杂结构为主,相对于直接使用字符串的简单类型,JSON 以对象-成员的基本编写逻辑组合数据,所以 JSON 导入之后就是一个对象(结构体+语言提供的解析方法)。

类型

JSON 支持以下几种类型(作为值):

  1. 数字
  2. 字符串,使用双引号表示
  3. 布尔
  4. null
  5. 对象:使用一对大括号包裹
  6. 上述内容的数组:使用方括号包裹。内部是键值对(“键”: 值)

格式

键值对规定:

  1. 键值一定是字符串,也就是以"键": 值 的格式进行
  2. 键值对之间使用逗号分割,最后一个不适用逗号
  3. JSON 不支持任何形式的注释

整体的格式要求

  1. 整体的 json 只有一个顶层对象,也就是所有的内容都在一个根元素以内,不能存在第二个顶层元素。

形式化的递归定义:

  1. json 支持四种基本的数据形式:数字,字符串,布尔
  2. json 的基本组成单位是对象,最简单的对象是{}
  3. 使用键值对"key":value 的形式置入 json 四种基本值,也是合法对象
  4. 对象也是合法键值
  5. 上述的五种类型构成的数组也是合法键值
  6. 整个 json 文件只有一个对象组成

语法

JSON 主要涉及两个函数:Stringfy 和 parse, 绝大多数现代语言都实现了这两个方法,来实现对象到字符串的转换,此处以 js 为例。

const data={"name": "CH","gender": "male","age":99};
const pa=JSON.stringfy(data);
const res= data.parser(pa);

值得说的是,上述的解析是直接创建一个新的副本的,程序里的 data 和 res 是两个内容相同的不同内存块,而不是指向同一块内存的两个引用。

yaml

yaml 是一种人类可读的数据序列化格式

类型

  1. 字符串(引号可选)
  2. 数字(整数,浮点)
  3. 布尔
  4. null
  5. 日期
  6. 数组:缩进一层使用-表示每一个成员
  7. 嵌套结构

格式与语言规范

  1. 不同于 json 这种基于传统的大括号逻辑,yaml 是缩进逻辑,元素间的层级关系是通过缩进表示的,也可以在行内使用 json 语法
  2. 同样适用键值对格式,但是键不强制使用引号,编写方便。
  3. 没有 json 那种一定要顶部元素的设定,默认有一个外部包装,内部可以有若干个顶层成员
  4. 缩进之间支持嵌套
  5. 有跨行语法
  6. 使用#做注释
student:
  - name : CH
    age : 19
    gender: man
  - name : JQ
    gender: woman
    location : New York
workers:
  - name : Alan Walker
    jop : DJ
    
# 嵌套语法展示

multline : | # 类似raw字符串,保留格式
multline : > # 只是一种比较方便看长字符的格式,最后会折叠成一行
multline : |2 # 保留换行与缩进
multline : |- # 去掉尾换行,+是强制使用换行

反斜杠换行:对于长串,也可以使用反斜杠来折回来,便于阅读。

特殊的变量语法

yaml 没有 json 那么老实的直接有对应关系,而是引入了一些变量系统。称为锚点和别名

  1. 使用 &修饰符,将一种变量格式设置为别名
  2. 使用 *name 的格式使用(完整的不可修改的内容)
  3. << * name 是继承语法,会沿用原本的元素,使用堆叠式的复制,也就是不会覆盖掉已经声明的同名成员(注意这个不是所有解析器都支持)
  4. 也可以将一些字面值设置别名并使用锚点匹配

复杂键:yaml 的键值不是单纯地字符串,也可以是正常的 yaml 直接值,对于复杂键,使用?做键标识。

语法

与 json 类似,yaml 的库函数大致有两类;load 和 dump,对应了 parse 和 stringfy。

XML

xml 是一种广泛使用的,类似于 HTML 的标记语言,比起前两个,可表达的信息更多,很多数据内部都是使用 xml +压缩包实现的。
xml 的设计更接近 html-like 的 json,他们都在传输内容中有较大作用,而 yaml 更加偏向于本地标记语言。

特点:

  1. xml 没有规定任何标签,大部分是约定俗成的
  2. xml 的元素名中间不能使用空格,也不能以 xml 三字母开头的非保留字
  3. 严格区分大小写(其实三者都一样)
  4. 标签是层级结构,不能互相嵌合。

语法

标签语法:与 HTML 高度一致
标签名 <name></name>
自闭合标签: <name/>
注释:<!-- info –>
属性: 与 HTML 保持一致:<name 属性=“值” 属性2=“值”>……
CDATA:转义符,处理一些被语法占用的符号

XML 约束

约束相当于一个编写文档,对 xml 的格式提出要求。

DTD 约束

一种类似关键字+正则的匹配规定策略。

Schema约束

DTD 的升级版本,语法更加贴近 xml 本身,但是语法规则复杂,这里不特意展开,还是给 AI 来写吧(

语法

xml 使用的函数也有 parse 和 stringfy 的类似方法,但是语言之间的实现差异较大,所以仅仅提及。

总结

这几种语言在学习时经常出现,也不断要写,但是每次都是有样学样,没有掌握的说法,所以这里专门整理出来,以供快速查验,也便于使用更多高级语法来简化工作。
三种数据结构各有异同,比如 json,yaml 比较轻量但是表达比较有限而且不好看,xml 虽然很重但是拓展功能很多,相对容易读。xml 和 yaml 都引入了解释器和动态语法,而 json 相对比较简单,只是一种数据表示格式,也表示传输性质好。实际使用的时候要根据需求灵活选择使用
三种语法都是进行对象储存的方式,还有诸如 csv 等结构化的储存方式。但是相对而言标准比较同意,格式比较明显,所以不多介绍。

Share 

 Next post: 关于社刊编辑的一些幕后故事 

© 2026 Crazyharp

Theme Typography by Makito

Developed by Crazy_Harp

Proudly published with Hexo