从 "什么是 JSON" → "VSCode 里哪些 JSON 文件" → "如何修改与运用"
🧩 一、什么是 JSON?
JSON(JavaScript Object Notation)是一种数据表示格式,全名是:
JavaScript 对象表示法
但它与语言无关,现在广泛用于配置、数据交换、API通信等。
✅ 一句话理解:
JSON 是一种用
{}表示对象、用[]表示数组、用"key": "value"表示键值对的配置文件格式。
🔹 基本语法结构:
json
{
"name": "Tom",
"age": 25,
"skills": ["C", "Python", "Linux"],
"married": false,
"address": {
"city": "Shenzhen",
"zip": "518000"
}
}
{}:包裹一个对象(类似结构体)[]:数组"key":字符串类型的键名::键与值的分隔符- 值可以是:字符串、数字、布尔、对象、数组或 null
- 不能有注释 (标准 JSON 不允许
//或/* */)
🔍 JSON 的语法规则:
| 特性 | 说明 |
|---|---|
键必须用双引号包裹 "key" |
单引号 'key' 会报错 |
| 最后一项后不能有逗号 | JSON 不支持"尾逗号" |
| 支持嵌套 | 对象内可以嵌套对象或数组 |
| 值类型 | string, number, object, array, boolean, null |
| 类型 | 举例 | 说明 |
|---|---|---|
| 对象(object) | { "a": 1, "b": 2 } |
一组键值对,用花括号包起来 |
| 数组(array) | [1, 2, 3] |
有序数据列表 |
| 字符串(string) | "hello" |
必须用 双引号,不能用单引号 |
| 数字(number) | 123, 3.14, -10 |
不用引号 |
| 布尔值(boolean) | true, false |
小写(和 JS/Python 一致) |
| 空值(null) | null |
表示"无"或"空" |
| 错误 | 原因 | 正确写法 |
|---|---|---|
❌ 用单引号 'key' |
JSON 只支持双引号 | ✅ "key" |
| ❌ 最后一项后多逗号 | 结尾不能多 , |
✅ 删除最后一个逗号 |
| ❌ 有注释 // | JSON 不支持注释 | ✅ 删除注释 |
| ❌ 数字带前导零 | 0123 不合法 |
✅ 123 |
⚙️ 二、VS Code 中常见的 JSON 配置文件
当你写 C/C++ 时,VSCode 其实在后台靠这些 JSON 文件来帮你:
🧱 1️⃣ c_cpp_properties.json
定义 编译器路径、标准、头文件搜索路径、宏定义 等。
路径:
.vscode/c_cpp_properties.json
示例:
json
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include",
"/usr/local/include"
],
"defines": [
"DEBUG",
"VERSION=1.0"
],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
🔹 功能说明:
| 字段 | 说明 |
|---|---|
includePath |
编译器搜索头文件的路径 |
defines |
预定义宏,相当于 #define DEBUG |
compilerPath |
指定编译器(如 gcc)路径 |
cStandard |
C语言标准:c89/c99/c11 |
intelliSenseMode |
智能提示模式,指定编译器架构 |
🧱 2️⃣ tasks.json
定义 如何编译、构建 程序。
比如执行 gcc main.c -o main 这类命令。
路径:
.vscode/tasks.json
示例:
json
{
"version": "2.0.0",
"tasks": [
{
"label": "build C program",
"type": "shell",
"command": "gcc",
"args": [
"main.c",
"-o",
"main",
"-Wall",
"-g"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"]
}
]
}
🔹 功能说明:
| 字段 | 说明 |
|---|---|
label |
任务名,会显示在命令面板 |
type |
shell 或 process,决定用哪种执行方式 |
command |
执行的命令(比如 gcc) |
args |
命令行参数 |
group |
任务分组,如构建(build)或测试(test) |
problemMatcher |
错误信息解析规则(常用 $gcc) |
执行方式:
VSCode 中按
Ctrl+Shift+B自动执行这个构建任务。
🧱 3️⃣ launch.json
定义 如何运行 / 调试 程序(配合 gdb)。
路径:
.vscode/launch.json
示例:
json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug C program",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/main",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"preLaunchTask": "build C program"
}
]
}
🔹 功能说明:
| 字段 | 作用 |
|---|---|
program |
要运行的可执行文件路径 |
args |
程序运行时的参数 |
cwd |
工作目录 |
externalConsole |
是否弹出终端运行 |
MIMode |
调试器类型(gdb / lldb) |
miDebuggerPath |
调试器路径 |
preLaunchTask |
调试前先执行的任务(如编译) |
🧱 4️⃣ settings.json
定义编辑器的行为,比如缩进、字体、CMake配置、编译器提示等。
路径:
.vscode/settings.json
示例:
json
{
"editor.tabSize": 4,
"editor.insertSpaces": true,
"files.associations": {
"*.h": "c"
},
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
}
🧠 三、VSCode 中 JSON 的变量与替换规则
VSCode 的 JSON 文件中可以用 ${变量} 表示动态路径:
| 变量名 | 含义 |
|---|---|
${workspaceFolder} |
当前打开的工程根目录 |
${file} |
当前编辑的文件路径 |
${fileDirname} |
当前文件所在目录 |
${fileBasename} |
文件名(不带路径) |
${fileBasenameNoExtension} |
文件名(不带扩展名) |
例:
json
"command": "gcc",
"args": [
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
]
相当于执行:
bash
gcc main.c -o ./main
🧩 四、自己修改与应用的技巧
-
找规律:JSON 文件其实就是把命令写成键值对形式;
-
不会写就用 GUI:
- 按
Ctrl+Shift+P→ 搜索 "C/C++: Edit Configurations (UI)"; - 它会自动生成并修改
c_cpp_properties.json;
- 按
-
调试时先保证 tasks.json 可用 ;
调试器(launch.json)依赖编译任务;
-
改错了 JSON 文件怎么办?
VSCode 自带语法检查,会在红色波浪线处显示错误;
-
善用变量替换,避免硬编码绝对路径;
-
注意 JSON 不能有注释 !
如果想写说明,可以加
_note字段,例如:json"_note": "用于构建 ARM 交叉编译版本"
🧱 五、一个完整 VSCode + C 的配置示例
假设工程结构如下:
project/
├── main.c
└── .vscode/
├── tasks.json
├── launch.json
├── c_cpp_properties.json
你可以这样配置:
🧩 .vscode/c_cpp_properties.json
json
{
"configurations": [
{
"name": "Linux",
"includePath": ["${workspaceFolder}/**"],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
🧩 .vscode/tasks.json
json
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "gcc",
"args": [
"main.c",
"-o",
"main",
"-g"
],
"group": { "kind": "build", "isDefault": true }
}
]
}
🧩 .vscode/launch.json
json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/main",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"preLaunchTask": "build"
}
]
}
现在:
Ctrl+Shift+B→ 编译;F5→ 调试;- 你就完全掌握了从源码到调试的 VSCode 自动化流程。
✅ 总结一张图:
| 文件名 | 作用 | 关键字段 |
|---|---|---|
c_cpp_properties.json |
配置 IntelliSense、头文件、宏、标准 | includePath, defines |
tasks.json |
编译任务定义 | command, args |
launch.json |
运行/调试配置 | program, preLaunchTask |
settings.json |
编辑器行为 | editor., C_Cpp. |