文章

常见数据文本格式总结

XML

XML是一种可扩展的数据标记语言,被用于传输数据,文件后缀为.xml

XML的标签为自定义标签,标签必须成对,使用<!---->表示注释

XML结构为树结构,需要有一个根标签,通常具有头声明

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<root>
	<name></name>
    <author></author>
    <msg>
        <price></price>
    </msg>
</root>

xml属性必须用引号包围,单引号或双引号都可以,若属性值包含双引号,则可以用单引号包围属性值,或者使用实体引用

实体引用

实体符号描述
&lt;<小于
&gt;>大于
&amp;&和号
&apos;单引号
&quot;引号

xml的样式表语言为XSLT,也可使用css设置样式

样式链接声明:<?xml-stylesheet type="text/xsl" href="simple.xsl"?>

命名空间

用于解决不同xml文档中相同标签的冲突

  1. 使用前缀解决冲突:<h:table></h:table>

  2. 使用默认命名空间

    在冲突标签中加入xmlns属性,<table xmlns="namespaceURL"></table>

  3. 使用前缀+命名空间

    在冲突标签中加入前缀和xmlns属性,<h:table xmlns:h="namespaceURL"></h:table>

CDATA标签

当标签内使用大量不需要解析的字符,如使用大量实体引用或代码,可以使用CDATA标签

1
2
3
<![CDATA[
content
]]>

JSON

JSON使用js对象的表示方法来表示数据,比xml更容易解析,通常用于数据传输,文件后缀为.json

json中使用键值对“key”: value来表示数据,key使用引号包括,不同的key-value之间使用逗号分隔

value类型

  • number
  • string
  • bool
  • array
  • object
  • null

json使用大括号{}表示一个object,一个object内包含多个key-value

json使用中括号[]表示一个array,一个array内包含多个value

一个json文件最外层是一层大括号,表示当前文件的json对象

json不支持注释

1
2
3
4
5
{
    "key1": 100,
    "key2": true,
    "array": ["e1", "e2"]
}

YAML

yaml常用于表示配置文件,逻辑结构,文件后缀为.yml

yaml使用缩进来表示层级关系,不能使用tab,只能使用空格,使用#表示注释

分号后必须加空格

数据类型

  • 对象:key-value的集合
  • 数组:value的有序序列
  • 字面量:单个的,不可再分的值

字面量

  • null:~

  • 单行字符串

    1
    2
    3
    4
    5
    6
    7
    8
    
    string: >
      single string
      second string
    # single string second string\n
    string: >-
      single string
      second string
    # single string second string
    
  • 多行字符串

    1
    2
    3
    4
    
    string: |
      first
      second
    # first\nsecond\n
    

字符串通常不需要使用双引号和单引号

单引号中的\不会转义,双引号会转义\

数组

以-开头表示数组的一个元素

1
2
3
4
array:
  - item1
  - item2
array: [item1, item2]

对象

属性以键值对表示

1
2
3
object:
  name: xxx
  age: xxx

TOML

TOML是一种用于配置文件的简单标记语言

TOML的基本单位是键值对,每一行为一个键值对,键名中使用.表示层次结构

1
2
3
4
5
6
7
8
9
10
# 一个键值对
key = "value"

key.key1 = "value"
# 等价于
# {
#   "key": {
#     "key1": "value"
#   }
# }

可以支持以下基本类型

  • 数值
  • 布尔值
  • 字符串
  • 日期和时间
  • 数组

toml中使用[tablename]声明一个表,它是键值对的集合,表名也支持使用.表示层次结构

1
2
3
4
5
6
7
[table-1]
key1 = "some string"
key2 = 123

[table-2]
key1 = "another string"
key2 = 456

内联表

内联表可以将一个表中的内容写在同一行

1
2
3
4
5
6
7
8
9
10
11
12
name = { first = "Tom", last = "Preston-Werner" }
point = { x = 1, y = 2 }
animal = { type.name = "pug" }
# 等价于
[name]
first = "Tom"
last = "Preston-Werner"
[point]
x = 1
y = 2
[animal]
type.name = "pug"

表数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[[products]]
name = "Hammer"
sku = 738594937

[[products]]
name = "Nail"
sku = 284758393
color = "gray"
# 等价于
# {
#   "products": [
#     { "name": "Hammer", "sku": 738594937 },
#     { "name": "Nail", "sku": 284758393, "color": "gray" }
#   ]
# }
本文由作者按照 CC BY 4.0 进行授权