零基础json入门教程(基于vscode的json配置文件)

发布于:2025-09-01 ⋅ 阅读:(22) ⋅ 点赞:(0)

一、什么是 JSON?—— 最核心的概念

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,长得像键值对的集合,用途是存储和传递数据。在 VS Code 中,它常被用来写配置文件(比如调试配置、插件配置等),语法简单且易于阅读。

核心特点

  • 由「键值对」组成(类似字典:"键": "值"
  • 键和字符串值必须用双引号"")包裹(单引号会报错)
  • 用逗号(,)分隔多个键值对(最后一个键值对后不能加逗号)
  • 支持嵌套(对象里放对象 / 数组,数组里放对象 / 值)

二、JSON 的基本数据类型(必须掌握)

JSON 中值的类型有 5 种,在 VS Code 配置中最常用的是前 4 种

类型 示例 说明
字符串 "name": "mps3-r52" 用双引号包裹的文本(路径、名称常用)
数字 "version": "0.2.0" 整数或小数(注意:VS Code 配置中版本号常用字符串形式)
布尔值 "stopAtEntry": true 只有 true(真)或 false(假)
数组 "args": [] 用 [] 包裹的列表,可放多个值
对象 "configurations": [{}] 用 {} 包裹的键值对集合,可嵌套

三、VS Code 中 JSON 的典型应用:调试配置文件(launch.json)

提供的示例就是 VS Code 调试 C/C++ 程序的配置文件(launch.json),用于告诉 VS Code 如何启动调试器。我们先通过这个示例拆解结构:

{
    "version": "0.2.0",  // 配置文件版本(VS Code 规定的固定值,无需修改)
    "configurations": [  // 调试配置列表(数组,可放多个配置方案)
        {  // 第一个配置方案(对象)
            "name": "mps3-r52",  // 配置名称(显示在调试面板,方便选择)
            "type": "cppdbg",   // 调试类型(C/C++ 程序用 "cppdbg")
            "request": "launch", // 调试方式:"launch"=启动程序;"attach"=附加到已运行程序
            "program": "${workspaceRoot}/bsp/qemu-mps3-an536/rtthread.elf",  // 待调试的程序路径
            "args": [],  // 启动程序时的命令行参数(无参数则为空数组)
            "stopAtEntry": true,  // 启动后是否在程序入口(如 main 函数)暂停
            "cwd": "${workspaceRoot}",  // 调试时的工作目录(程序运行的根目录)
            "environment": [],  // 调试时的环境变量(无特殊需求则为空)
            "externalConsole": true,  // 是否使用外部控制台(而非 VS Code 内置终端)
            "miDebuggerPath": "D:\\...\\arm-none-eabi-gdb.exe",  // 调试器的安装路径
            "miDebuggerServerAddress": "localhost:1234",  // 调试服务器地址(远程调试用)
            "serverLaunchTimeout": 2000,  // 连接调试服务器的超时时间(毫秒)
            "targetArchitecture": "ARM",  // 目标程序的 CPU 架构(如 ARM、x86)
            "MIMode": "gdb",  // 调试器模式(GDB 调试用 "gdb")
            "customLaunchSetupCommands": [],  // 自定义调试命令(默认无需修改)
            "launchCompleteCommand": "exec-run"  // 配置完成后执行的命令("exec-run"=开始运行)
        }
    ]
}

四、JSON 语法规则(避坑重点)

双引号必须成对:键和字符串值必须用双引号,单引号(')或漏写会报错。
❌ 错误:'name': 'mps3-r52' 或 name: "mps3-r52"
✅ 正确:"name": "mps3-r52"

逗号不能多写:多个键值对之间用逗号分隔,但最后一个键值对后不能加逗号。
❌ 错误:

{
    "name": "mps3-r52",
    "type": "cppdbg",  // 最后一个键值对后多了逗号
}

✅ 正确:

{
    "name": "mps3-r52",
    "type": "cppdbg"
}

对象和数组的嵌套

  • 对象用 {} 包裹,里面是键值对;
  • 数组用 [] 包裹,里面是值(可以是字符串、对象等);
  • 嵌套时注意层级对齐(VS Code 会自动格式化,按 Ctrl+Shift+I 可格式化)。

五、VS Code 中的 JSON 变量(${xxx})

在示例中出现的 ${workspaceRoot} 是 VS Code 预定义的变量,用于动态获取路径(避免写死绝对路径),常用变量:

变量 含义
${workspaceRoot} 当前打开的工作区根目录
${file} 当前打开的文件路径
${fileDirname} 当前打开文件的所在目录

例如:"program": "${workspaceRoot}/rtthread.elf" 会自动替换为工作区根目录下的 rtthread.elf 文件路径。

练习题(阶段 1:基础语法)

题目 1:判断以下 JSON 是否正确,若错误请修正

{
    "name": 'debug',
    "type": cppdbg,
    "request": "launch"
}

题目 2:补全以下 JSON,要求:

添加 program 键,值为工作区根目录下的 build/main.elf

添加 stopAtEntry 键,值为 false

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "my-debug",
            "type": "cppdbg",
            "request": "launch",
            // 在此处补全
        }
    ]
}

练习题答案与解析

题目 1 解析:

❌ 原 JSON 错误,问题有两处:

  1. name 的值用了单引号 'debug',应改为双引号 "debug"
  2. type 的值 cppdbg 漏了双引号,应改为 "cppdbg"

✅ 修正后:

{
    "name": "debug",
    "type": "cppdbg",
    "request": "launch"
}

题目 2 解析:

需要添加两个键值对,注意格式和变量用法:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "my-debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceRoot}/build/main.elf",  // 补全program
            "stopAtEntry": false  // 补全stopAtEntry,注意无逗号(最后一个键值对)
        }
    ]
}

六、进阶:理解调试配置的实际作用(结合工作场景)

以你的示例为例,每个字段在调试中的作用:

  • name:在 VS Code 调试面板中显示的配置名称,方便切换不同配置;
  • program:指定要调试的程序(必须是带调试信息的可执行文件,如 .elf);
  • miDebuggerPath:指定调试器的路径(如 arm-none-eabi-gdb.exe 是 ARM 架构的 GDB 调试器);
  • miDebuggerServerAddress:如果调试的是远程程序(如开发板),这里填远程服务器的地址(IP:端口);
  • stopAtEntrytrue 表示程序启动后会在 main 函数入口处暂停,方便逐步调试。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "stm32-debug",  // 修改名称
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceRoot}/bsp/stm32f103/rtthread.elf",  // 修改程序路径
            "args": [],
            "stopAtEntry": false,  // 改为不暂停
            "cwd": "${workspaceRoot}",
            "environment": [],
            "externalConsole": true,
            "miDebuggerPath": "C:\\tools\\arm-gcc\\bin\\arm-none-eabi-gdb.exe",  // 修改调试器路径
            "miDebuggerServerAddress": "localhost:1234",
            "serverLaunchTimeout": 2000,
            "targetArchitecture": "ARM",
            "MIMode": "gdb",
            "customLaunchSetupCommands": [],
            "launchCompleteCommand": "exec-run"
        }
    ]
}
练习题(阶段 2:实际应用)

题目 3:修改示例配置,满足以下需求

  1. 配置名称改为 stm32-debug
  2. 调试的程序路径为工作区 bsp/stm32f103/rtthread.elf
  3. 调试器路径为 C:\tools\arm-gcc\bin\arm-none-eabi-gdb.exe
  4. 启动后不在入口处暂停(即 stopAtEntry 为 false)。

题目 3 答案与解析:

按需求修改对应字段即可,注意路径中的反斜杠(\)在 JSON 中无需转义(直接写 C:\tools\...):

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "stm32-debug",  // 修改名称
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceRoot}/bsp/stm32f103/rtthread.elf",  // 修改程序路径
            "args": [],
            "stopAtEntry": false,  // 改为不暂停
            "cwd": "${workspaceRoot}",
            "environment": [],
            "externalConsole": true,
            "miDebuggerPath": "C:\\tools\\arm-gcc\\bin\\arm-none-eabi-gdb.exe",  // 修改调试器路径
            "miDebuggerServerAddress": "localhost:1234",
            "serverLaunchTimeout": 2000,
            "targetArchitecture": "ARM",
            "MIMode": "gdb",
            "customLaunchSetupCommands": [],
            "launchCompleteCommand": "exec-run"
        }
    ]
}