為避免JSON語法混亂,我們先簡易講述一下JSON語法規則。
JSON全名JavaScript Option Notation,為一種半結構式的訊息交換的程式語言。
由於結構容易理解,因此是繼XML結構後新的後繼者。從VSCode的設定,到Jupyter筆記本的訊息紀錄,再到Minecraft的資料包訊息設置均由JSON格式設定完成。
首先稍微理解一下JSON內的物件形式:
-
JSON鍵值: 由一對鍵值(Key-Pair Value)形成。
"author": "TaiXeflar"範例中,鍵是
"author",值是"TaiXeflar"。其中,值可以是:
- 字串(以雙引號
""為字串值,空字串也可以)。 - 數值(整數或浮點數)。
- 布林值
true,false。 - 空物件
null。 - JSON物件
{}。 - JSON陣列
[]。
- 字串(以雙引號
-
JSON物件: 該物件為一組大擴號(花擴號)
{}。JSON物件內可以是:- JSON鍵值
-
JSON陣列: 該物件為一組中擴號(方擴號)
[]。JSON陣列內可以是:- JSON陣列
- JSON物件
- 字串值
- 數值 (整數或浮點數)
- 布林值
true,false - 空物件
null
-
JSON註解: 該註解形式限在
.jsonc上才能以//標記註解。在.json中加入註解是違法的。- 參考以JSON編輯VSCode的個人化設定的
"files.associations"選項以設定將json關聯至jsonc的方法。
- 參考以JSON編輯VSCode的個人化設定的
無論任何被包含在內物件,均需以逗號分隔(最後一個物件不能有逗號),鍵值的鍵或是字串需要以雙引號""為合法。
以下是一個JSON檔案範例:
- JSON
{ // JSON 註釋就是加上//形成單行註釋 "Units": // 加上這行註釋就是違反JSON語法了 [ // 參考"VSCode的個人化設定"以設定將json關聯至jsonc的方法 { // 這樣才可以光明正大地寫註釋而不會被告知違反語法 "name": "user1", "id": 1, "boss": true }, { "name": "user2", "id": 2, "boss": false }, { "name": "user3", "id": 3, "boss": false }, ] }
在settings.json中,僅有一個空的JSON物件。我們會逐步添加下列解說的鍵值。
常見的設定項:
-
"files.autosave": 檔案自動儲存設定。- 值為
afterDelay時: VSCode會以被設定的時間計算延遲後自動存檔。 - 值為
off時: VSCode不會自動存檔。 - 值為
onFocusChange時: VSCode會偵測該編輯的檔案是否失去焦點(例如切換到其他檔案編輯時)而自動儲存檔案。 - 值為
onWindowsChange時: VSCode會根據VSCode視窗是否失焦(例如切換到Chrome時)而自動儲存檔案。
- 值為
-
"files.autoSaveDelay": 設定VSCode自動存檔的延遲時間,單位以毫秒計算;預設是經過1秒未(即1000毫秒)有動作即自動存檔。該選項必須要"files.autosave"的值為afterDelay時才會生效。假設「以0.5秒的延遲自動存檔」:
- JSON
"files.autoSave": "afterDelay", "files.autoSaveDelay": 500
- JSON
-
"editor.mouseWheelZoom": 布林值(true/false)。允許透過Ctrl+滑鼠滾輪放大/縮小工作區字體大小。 -
"editor.fontFamily": 工作區的字體家族。- JSON
"editor.fontFamily": "Font1, Font2, 'Font3', 'Font4'"
此處範例為"Xolonium"字體(ROG官方字體)。
該鍵值可由逗號傳遞一組以上的字體設定;字體名稱有空格則以單引號括住傳遞。若第一順位的字體找不到實則由第二順位遞補。
例如,以Consolas字體為英文字母主要呈現,以微軟正黑體為中文字體主要呈現,可以這樣設定:
- JSON
"editor.fontFamily": "Consolas, 'Microsoft JHengHei UI', <Font3>, ....."
請注意這個JSON鍵值不具有Intellisense自動選字,因此需自行手動確認該字體名稱是否輸入正確。 以下是特殊字體樣式參考:
- Xolonium: ROG官方字體(RTX 30系以前主題)。
- ROG Fonts: ROG官方標頭/萬國碼字體。
- GeForce: NVIDIA GeForce GTX/RTX字體(RTX 30系以前主題)。
- IntelOne Display: Intel新版主題格式(Intel Core 11代以後)。
- Klavika: AMD官網標準字體。
- Helvetica: Apple官網及Apple產品的標準字體。
- Minecraft: Minecraft遊戲內標準字體。
- Minecraft Enchantment: Minecraft遊戲內附魔字體。該字體為銀河標準字母。
- Aurebesh: 星際大戰(Star Wars)世界觀字體。
- Rainbow: 虹彩六號圍攻行動(Rainbow Six Siege)的主題字體。
- HYWenHei 85: 原神(Genshin Impact)官方主題字體。
- Microsoft JHengHei UI: 微軟正黑體。
- Microsoft YaHei UI: 微軟雅黑體。
- Consolas: Consolas字體,VSCode內標準字體(第一順位)。
- JSON
-
"editor.fontWeight": 字體粗細程度,允許一般及粗體字體,不允許斜體。 -
"terminal.integrated.fontFamily": VSCode內鍵終端機的字體。請注意僅能使用等寬字體。 -
"workbench.startupEditor": 控制在啟動時顯示哪個編輯器,若沒有("none"),則從上個工作階段還原。這意味著VSCode會開啟你上次最後一個工作狀態。 -
"workbench.colorTheme": 主題色彩。 -
"files.associations": 設定檔案關聯性。可覆寫預設關聯設定。以下提供一段範例:- JSON
"files.associations": { "*.json": "jsonc", "*.m": "matlab" }這段程式碼的含意是:
- 允許VSCode將json檔案關聯至jsonc檔案,從而允許在json檔案內以
//撰寫註釋。 - 允許VSCode將m檔案關聯至Matlab M-Files。 (原
.m檔案關聯至Objective-C來源檔案。)
-
"terminal.integrated.profiles.windows": 在Windows底下自定義VSCode內終端機的下拉式選單,值為自定義且包含特定子鍵值的JSON物件。以下是Windows環境下的VSCode整合式終端機的預設值:
"terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "icon": "terminal-powershell" }, "Command Prompt": { "path": [ "${env:windir}/Sysnative/cmd.exe", "${env:windir}/System32/cmd.exe" ], "args": [], "icon": "terminal-cmd" }, "Git Bash": { "source": "Git Bash" } }預設會有
PowerShell,Command Prompt兩個JSON物件。事實上,JSON物件可以是你隨意指定的內容。若是在VSCode安裝後再安裝Git,則會自動建立可呼叫Git的終端設定檔。下列以手動建立設定檔為範例。
-
建立Cygwin環境Bash,並啟動目錄位置在
/home/USER/為例(USER是你的使用者名稱): {請務必確認你的路徑到底在哪裡。}"Cygwin Bash": { "path": ["C:/cygwin64/bin/bash.exe"], "args": ["--login", "-i"] "icon": "console" }當中:
"source"鍵值可以自動偵測殼層路徑的設定檔來源。因為Cygwin在非標準可執行位置,因此以"path"取代。"path"為殼層可執行檔的檔案位置。你可以直接填入殼層可執行檔的檔案路徑,或是以JSON陣列填入多個可執行檔。"args"為要傳遞到該殼層內的參數或引數(flags),使用JSON清單包含所有要被傳遞的引數。"icon"為顯示於下拉式清單的圖示。
-
建立Visual Studio 2022的開發人員命令提示字元:
"VS2022 CMD": { "path": ["C:/Program Files/Microsoft Visual Studio/2022/Common7/Tools/VsDevCmd.bat"], "args": ["host_arch=x64", "arch=x64"] "icon": "console" }
-
-
"terminal.integrated.profiles.osx": 在macOS底下自定義VSCode內終端機的下拉式選單,值為自定義且包含特定子鍵值的JSON物件。以下是macOS環境下的VSCode整合式終端機的預設值:
"terminal.integrated.profiles.osx":{ "zsh": { "path": "zsh", "args": ["-l"] }, "bash": { "path": "bash", "args": ["-l"], "icon": "terminal-bash" }, "fish":{ "path": "fish" "args": ["-l"] }, "tmux":{ "path": "tmux", } }預設會有
BASH(Borune Again Shell),ZSH(Z Shell),FISH(Friendly Interactive Shell),tmux等4個JSON物件。 -
"files.autoSave": 設定自動存檔的觸發時機,共有4個選項可以選擇。"off": 關閉自動存檔的功能。若"files.autoSave"選項不存在則亦視為不自動存檔。"afterDelay": 設定自動存檔的延遲時間。若"files.autoSaveDelay"設定鍵值不存在時,預設是1000毫秒(即1秒)。"onFocusChange": 設定成該編輯檔案若失去焦點(當你在VSCode內切換其他已開啟的檔案標籤)時自動儲存。"onWindowsChange": 設定成該VSCode視窗若失去焦點(當你切換其他應用程式視窗)時自動儲存。
-
"files.autoSaveDelay": 設定自動存檔的延遲時間,以毫秒為單位。預設是1000。 -
"explorer.confirmDelete": 在左側的檔案總管中刪除檔案時,是否跳出互動視窗確認刪除該檔案。 -
"security.workspace.trust.untrustedFiles": 是否信任工作區內未受信任的檔案。
筆者以自用的VSCode範例提供完整的settings.json參考 :
- JSON
{ "editor.mouseWheelZoom": true, "editor.fontFamily": " '-Xolonium', 'HYWenHei 85W', Consolas, Microsoft JHengHei UI", "editor.fontWeight": "normal", "editor.fontSize": 18, "terminal.integrated.fontFamily": "Consolas", "terminal.integrated.fontSize": 18, "git.confirmSync": false, "git.autofetch": true, "git.enableSmartCommit": true, "workbench.startupEditor": "none", "security.workspace.trust.untrustedFiles": "open", "explorer.confirmDelete": true, "files.autoSave": "afterDelay", "files.autoSaveDelay": 100, "files.associations": { "*.m": "matlab", "*.json": "jsonc", }, "workbench.colorTheme": "Visual Studio Dark", "terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "icon": "terminal-powershell" }, "PowerShell for VS2022": { "source": "PowerShell", "args": ["-NoExit", "-Command", "&{Import-Module 'C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/Tools/Microsoft.VisualStudio.DevShell.dll'; Enter-VsDevShell 8f5c46dc -SkipAutomaticLocation -DevCmdArguments '-arch=x64 -host_arch=x64'}"] }, "PowerShell for intel oneAPI": { "path": [ "${env:windir}/Sysnative/cmd.exe", "${env:windir}/System32/cmd.exe" ], "args": ["/E:ON", "/K", "setvars.bat", "intel64 VS2022", "&&", "powershell.exe", "-nologo"] }, "Command Prompt": { "path": [ "${env:windir}/Sysnative/cmd.exe", "${env:windir}/System32/cmd.exe" ], "args": ["/E:ON"], "icon": "terminal-cmd" }, "Cygwin Bash": { "path": ["C:/Program Files/Cygwin/bin/bash.exe"], "args": ["--login", "-i"], "icon": "console" }, "Cygwin Zsh": { "path": ["C:/Program Files/Cygwin/bin/zsh.exe"], "args": ["--login", "-i"], "icon": "console" }, "Git Bash": null, }, "terminal.integrated.profiles.osx": { "bash": { "path": "bash", "args": ["-l"], "icon": "terminal-bash" }, "zsh": { "path": "zsh", "args": ["-l"] }, "pwsh": { "path": "pwsh", "icon": "terminal-powershell" }, "MATLAB Interactive":{ "path": "matlab" "args": ["-nodisplay"] } }, "code-runner.executorMap": { "matlab": "cd $dir && matlab.exe -batch $fileNameWithoutExt" }, "matlab.matlabpath": "C:/Program Files/MATLAB/R2022a/bin/matlab.exe", "matlab.mlintpath": "C:/Program Files/MATLAB/R2022a/bin/win64/mlint.exe", "matlab.linterEncoding": "gb2312", "remote.SSH.remotePlatform": { "XXX.XXX.XXX.XXX": "linux" }, "editor.accessibilitySupport": "off", "terminal.integrated.commandsToSkipShell": [ "language-julia.interrupt" ], "julia.symbolCacheDownload": true, "julia.cellDelimiters": [ "^##(?!#)", "^#(\\s?)%%", "^#-" ], "julia.enableTelemetry": true, "python.languageServer": "Jedi", "python.experiments.enabled": false, "workbench.editor.enablePreview": false, "editor.minimap.enabled": false, }


