知識庫 / JSON RSS 訂閱

YAML 與 JSON 的區別

Data,JSON
HongKong
10
09:52 PM · Dec 05 ,2025

1. 概述

在本文檔中,我們將通過快速且實用的示例,探討 YAML 和 JSON 之間的差異。

2. 格式

為了獲得更好的圖像,我們首先來看 JSON 和 YAML 中一個簡單 POJO 的表示:

class Person {
    String name;
    Integer age;
    List<String> hobbies;
    Person manager;
}

首先,我們來看一下它的JSON表示:

{
    "name":"John Smith",
    "age":26,
    "hobbies":[
        "sports",
        "cooking"
    ],
    "manager":{
        "name":"Jon Doe",
        "age":45,
        "hobbies":[
            "fishing"
        ],
        "manager":null
    }
}

JSON 語法相對繁瑣,因為它使用特殊語法,如花括號 {} 和方括號 [] 來表示對象和數組。

接下來,讓我們看看同樣的結構在 YAML 中會是什麼樣:

name: John Smith
age: 26
hobbies:
  - sports
  - cooking
manager:
  name: Jon Doe
  age: 45
  hobbies:
    - fishing
  manager:

YAML 的語法看起來更友好,因為它使用空格來表示對象之間的關係,並且使用 ‘’ 來表示數組元素。

我們可以看到,雖然兩者都易於閲讀,但 YAML 傾向於更易於人類閲讀。

YAML 另一個優勢是它表示相同信息的行數——YAML 只需要 11 行,而 JSON 需要 16 行。

3. 尺寸

我們之前已經看到,YAML 的行數比 JSON 少,但這是否意味着它佔用空間更少?

讓我們設想一個深度嵌套的結構,包含一個父級節點和五個子節點,以 JSON 表示如下:

{
    "child":{
        "child":{
            "child":{
                "child":{
                    "child":{
                        "child":{
                            "child":null
                        }
                    }
                }
            }
        }
    }
}

相同的結構在 YAML 中也會看起來相似:

child:
  child:
    child:
      child:
        child:
          child:
            child:

第一眼看上去,JSON 可能會顯得佔用更多空間,但實際上,JSON 規範不關心空格或換行符,並且可以像下面這樣縮短:

{"child":{"child":{"child":{"child":{"child":{"child":{"child":null}}}}}}}

我們能看出,這種第二種形式要短得多,只佔用 74 字節,而 YAML 格式則佔用 97 字節。

4. YAML 特性

除了 JSON 提供的基本功能之外,YAML 還具有額外的功能,如下一節所述。

4.1. 註釋

YAML 通過使用 #, 提供註釋功能,這在處理 JSON 文件時經常被需求,是 YAML 的一個常用特性:

# This is a simple comment
name: John

4.2. 多行字符串

YAML 中缺少但 JSON 中存在的一種特性是多行字符串:

website: |
  line1
  line2
  line3

4.3. 別名和錨點

我們可以使用 &amp; 輕鬆地為特定項目分配別名,並使用 * 進行錨定(引用)。

httpPort: 80
httpsPort: &httpsPort 443
defaultPort: *httpsPort

5. 性能

由於 JSON 規範的簡潔性,其解析/序列化數據的性能優於 YAML。

我們將實施一個簡單的基準測試,使用 JMH 比較 YAML 和 JSON 的解析速度。

對於 YAML 基準測試,我們將使用知名庫 snake-yaml,對於 JSON 基準測試,我們將使用 org-json

@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
@Measurement(batchSize = 10_000, iterations = 5)
@Warmup(batchSize = 10_000, iterations = 5)
@State(Scope.Thread)
class Bench {

    static void main(String[] args) {
        org.openjdk.jmh.Main.main(args);
    }

    @State(Scope.Thread)
    static class YamlState {
        public Yaml yaml = new Yaml();
    }

    @Benchmark
    Object benchmarkYaml(YamlState yamlState) {
        return yamlState.yaml.load("foo: bar");
    }

    @Benchmark
    Object benchmarkJson(Blackhole blackhole) {
        return new JSONObject("{\"foo\": \"bar\"}");
    }
}

正如我們所預料的,JSON 是獲勝者,速度比它快約 30 倍:

Benchmark             Mode  Cnt    Score   Error  Units
Main2.benchmarkJson  thrpt   50  644.085 ± 9.962  ops/s
Main2.benchmarkYaml  thrpt   50   20.351 ± 0.312  ops/s

6. 庫可用性

JavaScript 是 Web 上的標準語言,這意味着幾乎找不到不支持 JSON 的語言。

另一方面,YAML 得到廣泛支持,但它並非標準語言。這意味着對於大多數流行的編程語言,存在相應的庫,但由於其複雜性,這些庫可能無法完全實現規範。

7. 選擇哪種格式?

這個問題可能很難回答,而且在很多情況下也具有主觀性。

如果我們需要向其他前端或後端應用程序暴露一組 REST API,我們應該選擇 JSON,因為它在行業中是事實上的標準。

如果我們需要創建一個經常由人類讀取/更新的配置文件,YAML 可能是個不錯的選擇。

當然,也可能存在一些用例,其中 YAML 和 JSON 都能很好地發揮作用,這隻取決於個人喜好。

8. 結論

在本文中,我們學習了 YAML 和 JSON 之間的主要區別,以及在做出明智決策時應考慮的方面,選擇哪一種格式。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.