這個頁面的程式碼沒跑起來。

直接從資料夾裡開啟 index.html,瀏覽器會攔下 JavaScript 模組,於是你選好一個檔案之後,頁面不會有任何反應。改用 http 把這個資料夾提供出去:

powershell -ExecutionPolicy Bypass -File serve.ps1

然後開啟 http://localhost:8080/。

YAML 轉 JSON — JSON 也能轉回 YAML

兩個方向都有,而且會告訴你各自的代價。這些都不會貼進別人的伺服器。

語言: 繁體中文
檢視原始碼
你的 YAML 和 JSON 不會上傳。這裡根本沒有伺服器。

轉換是對一段字串做算術,就在這裡,在這個頁面上。兩個解析器都是手寫的,都在 src/ 裡——shared/parse-yaml.js 和 shared/parse-json.js——除此之外再沒有別的。這個工具壓根就沒有網路功能,沒有要取的,也沒有要發的。這一點在這裡比本站幾乎任何地方都更要緊:一份 YAML 檔案多半是部署配置,而部署配置多半塞滿了主機名、桶名和金鑰。

即時檢查: 檢查中…

離線: 檢查中…

不用信我們說的。開啟開發者工具,盯著「網路」面板,轉換點什麼。沒有哪個請求帶走你貼進去的一個字元。嫌麻煩就直接拔掉網線,照樣轉換。

1 選方向

縮排 製表符只對 JSON 提供。YAML 是按空格定義的,製表符在它裡面不是合法縮排。

給每個物件的鍵排序 按鍵讀起來的樣子排,而不是按它們的碼位,所以 item2 排在 item10 前面。

2 貼進來

空的

3 把結果帶走

還沒有結果。

 

以 Markdown 檢視

不上傳就把 YAML 轉成 JSON 的步驟

  1. 選方向。YAML 轉 JSON 或者 JSON 轉 YAML。選單下面那行小字會在你貼任何東西之前,而不是之後,告訴你這個方向會丟什麼。
  2. 貼進來,或者把檔案放上去。能選中能複製的都行。把檔案放到選擇框上,你自己的瀏覽器會讀它並填進輸入框——這裡沒有上傳這一步可以省略——而 .json 或 .yaml 的字尾順便就把方向定好了。
  3. 選縮排。兩個空格、四個空格,或者一個製表符。製表符只對 JSON 提供:YAML 是按空格定義的,製表符在它裡面不是合法縮排。
  4. 在出錯的地方讀錯誤。在這裡失敗的解析器會告訴你它遇到了什麼,在第幾行第幾列,而不是「位置 4193 處有意外的 token」。通常這就夠你修好一份配置檔案,不用再開啟別的東西。
  5. 把結果拿走。複製,或者下載成檔案,檔名按它出來的格式取。

常見問題

我的 YAML 會被上傳到什麼地方嗎?

不會。這個頁面上的兩個解析器和兩個列印器,都是在你自己的瀏覽器裡、你自己的硬體上跑的函式。這個工具壓根就沒有網路功能,從不取任何東西,也從不發任何東西,頁面的 Content-Security-Policy 裡寫著它允許聯絡的每一個地址,沒有一個屬於本站。這正是拿它處理部署配置的理由:那種檔案裡塞滿主機名、桶名,偶爾還有某人打算挪走的金鑰,把它貼進別人的轉換器,就是把它給了對方。

把 YAML 轉成 JSON 會丟什麼?

註釋,因為 JSON 沒地方放。錨點、別名和標籤會被直接拒絕,而不是靠猜——它們各自說的事情 JSON 都說不出來,一個悄悄挑了種解釋的轉換器,會交給你一份並不是檔案原意的文件。反方向不丟任何東西:每一份 JSON 文件本來就已經是 YAML 文件。

我的 YAML 裡寫的是 no,JSON 出來卻是字串。為什麼?

因為它本來就是字串,而這裡讀的是 YAML 1.2,不是 1.1。在 YAML 1.1 裡,yes、no、on 和 off 都是布林值,這就是那個著名的坑:挪威的國家程式碼會變成 false。YAML 1.2 把這條丟掉了,這裡也一樣:只有 true、false、null 和 ~ 會被當成文字之外的東西讀。反過來的時候,這些詞會帶引號寫回去——哪怕這裡不帶引號也照樣當文字讀——因為下一個開啟這份檔案的東西未必如此。PyYAML 到現在預設還是 1.1。嚴格地讀、保守地寫,是兩邊都對的唯一組合。

它會保持我的鍵順序嗎?

會,兩個方向都會,而這比聽起來難。建立在 JSON.parse 上的轉換器會悄悄把看起來像整數的鍵挪到前面,於是 {"10":a,"2":b} 回來就成了 {"2":b,"10":a}。數字保留你打的每一位,所以一個二十位的帳號不會因為雙精度浮點丟掉最後三位。如果你就是想排序,有個勾選框,而且它按鍵讀起來的樣子排,不是按碼位。

能一次轉換好幾份 YAML 文件嗎?

不能,而且它會直說,而不是替你挑一份。帶 --- 分隔符的檔案裝著不止一份文件,而 JSON 沒有哪種形狀表示「好幾份文件」——用陣列的話,就成了這份檔案從沒做過的斷言。一份一份轉。

這裡為什麼沒有 YAML 格式化?

因為 YAML 沒有值得一寫的壓縮形式——短的那種是流式風格,讀不了,而讀不了正是把檔案留成 YAML 這件事的反面。排開 JSON、XML、HTML 和 CSS 是 JSON 格式化的工作,而且它也排 YAML。

檔案最大能有多大?

這裡沒有設限,因為沒有伺服器在為此付錢。真正的上限是你自己的裝置:幾 MB 的 YAML 沒問題,文件很長的時候,頁面會等你打字停下來再轉換,而不是跟你搶鍵盤。

免費嗎?需要註冊嗎?

免費,沒有帳號,不用登入,沒有試用期,也不限制你貼多少。本站有廣告,網站靠它維持;廣告拿不到關於你文字的任何東西。

斷網還能用嗎?

能。頁面載入一次之後拔掉網線,它照樣工作。這也是證明沒有上傳的最簡單辦法:一個把你的配置送出去轉換的工具,在你拔線的那一刻就停了。