📄
JSON XML YAML TOML を見た目で比較してみる
モチベーション
JSON
, XML
, YAML
, TOML
について以下ポストが話題になっており、パッと見た目を比較したいと考えました。
比較
同一内容のファイルを各形式で比較してみます。
JSON
{
"users": [
{
"id": 1,
"name": "Alice",
"age": 28,
"hobbies": ["reading", "traveling", "swimming"],
"address": {
"city": "New York",
"zipcode": "10001"
}
},
{
"id": 2,
"name": "Bob",
"age": 34,
"hobbies": ["gaming", "cycling"],
"address": {
"city": "San Francisco",
"zipcode": "94105"
}
}
]
}
XML
<root>
<users>
<user>
<id>1</id>
<name>Alice</name>
<age>28</age>
<hobbies>
<hobby>reading</hobby>
<hobby>traveling</hobby>
<hobby>swimming</hobby>
</hobbies>
<address>
<city>New York</city>
<zipcode>10001</zipcode>
</address>
</user>
<user>
<id>2</id>
<name>Bob</name>
<age>34</age>
<hobbies>
<hobby>gaming</hobby>
<hobby>cycling</hobby>
</hobbies>
<address>
<city>San Francisco</city>
<zipcode>94105</zipcode>
</address>
</user>
</users>
</root>
YAML
users:
- id: 1
name: Alice
age: 28
hobbies:
- reading
- traveling
- swimming
address:
city: New York
zipcode: "10001"
- id: 2
name: Bob
age: 34
hobbies:
- gaming
- cycling
address:
city: San Francisco
zipcode: "94105"
TOML
[[users]]
id = 1
name = "Alice"
age = 28
hobbies = ["reading", "traveling", "swimming"]
[users.address]
city = "New York"
zipcode = "10001"
[[users]]
id = 2
name = "Bob"
age = 34
hobbies = ["gaming", "cycling"]
[users.address]
city = "San Francisco"
zipcode = "94105"
データで見てみる
ファイル形式 | 行数 | 文字数(スペース込み) |
---|---|---|
JSON | 24 | 417 |
XML | 31 | 623 |
YAML | 20 | 307 |
TOML | 19 | 270 |
所感
-
JSON
,YAML
はデータ構造が見やすい -
XML
はどうしても見た目がゴツくなる -
TOML
は行数・文字数ともに最小- ただしテーブルの配列やネストが多いとツラそう
基本は JSON
, レガシーシステムなら XML
, 簡潔にしたいなら YAML
, テーブルの配列やネストが絶対にないなら TOML
が最適かなと考えます。
参考
Discussion
XML、
id
は少なくともuser
要素の属性として定義したいですね。name
とage
は微妙ですが。シリアライズして使う分には違いはないですが、DOM系のAPIだと
@id
とid/text()
ではかかる手間が大きく違うので。