一、什么是 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"}]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95092.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95092.shtml
英文地址,请注明出处:http://en.pswp.cn/web/95092.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入对比分析SpringCloud和Dubbo两大微服务框架的核心架构与特性。

1 微服务架构演进与核心概念1.1 微服务架构的本质微服务架构是一种将单一应用程序划分为一组小型服务的方法,每个服务运行在自己的进程中,服务之间通过轻量级的通信机制进行协作。这些服务围绕业务能力构建,并能够独立部署到生产环境中。微服…

鸿蒙ArkTS 核心篇-14-条件表达式(三目运算符)

目录 根据逻辑条件结果,执行不同的表达式,得到不同结果 DevEco Studio代码实战 ctrl s 日志输出 总结 根据逻辑条件结果,执行不同的表达式,得到不同结果 DevEco Studio代码实战 let num1: number 100 let num2: number 20l…

CDH集成LDAP进行身份验证

前言:在内网环境中部署LDAP并在CDH的hive和impala中集成,其中配置的端口,镜像名,密码等需要根据自己情况进行更改 1、镜像下载 在有网络的服务器上下载镜像或直接下载,这里需要自行配置下docker镜像下载地址 # 下载…

并发编程:Java中的多线程与线程池!

全文目录:开篇语线程的基础概念线程生命周期线程调度线程安全线程池:Executor框架、线程池的管理与调优Executor框架线程池的管理与调优并发工具类:ReentrantLock、CountDownLatch、CyclicBarrier等ReentrantLockCountDownLatchCyclicBarrier…

语义分割一站式到底怎么玩?

语义分割模型,复现或改进、对比实验,,欢迎交流,完爆各种详细需求1、可以接以下语义分割模型dai做 DeepLabV3、PSPnet、HRnet、Segformer、Unet、u2net、cenet、erfnet、hcanet、hiformer、uiunet、nnunet、saunet、unext、dscnet、…

由于不对称GND过孔配置,差分信号过孔上的差模到共模转换

本文研究了靠近高速差分信号过孔的接地过孔的影响以及由此产生的差模到共模的转换。该工作显示了接地 (GND) 过孔和差分信号之间距离的影响 (Diff. SIG.);GND过孔不对称配置的影响;介电厚度和平面之间跃迁次数的影响。 印刷电路板…

Axios 实例配置指南

今天分享一段 Axios 实例配置的代码,用于 Web Front - End 项目的构建。 一、为什么使用 Axios 在前端项目中,与后端进行数据交互是必不可少的。Axios 是一个基于 Promise 的 HTTP 客户端,它提供了简洁的 API 和强大的功能,能够方…

分分合合,门模块方案又兴起了

文章目录前言1.方案概述1.1 功能需求1.2 框图2.供电和通信2.1 理想二极管控制器2.2 SBC2.3 高边开关3.门模块PCBA3.1 后视镜3.2 车窗和电动门4.车锁控制PCBA5.氛围灯PCBA6.未来趋势前言 最近接触了一些之前做门锁、门控、BCM的客户,发现他们或多或少都在做一些门模…

AWD相关知识

AWD AWD:Attack With Defence,即攻防对抗,比赛中每个队伍维护多台服务器(一般两三台,视小组参赛人数而定),服务器中存在多个漏洞(web层、系统层、中间件层等)&#xff0c…

基于CNN(卷积神经网络)的门牌号识别

1、官网下载SVHN数据集svhn是数据集,Dataset2、HOG特征3、支持向量机 SVM(Support Vector Machine,SVM) 分类器4、cv2需要导入 pip install opencv-python5、HOG特征提取5.1 伽马校正归一化预补偿反归一化无伽马校正有伽马校正5.2 灰度化5.3 图像梯度计…

使用LLAMA_cpp_python进行qwen2.5-vl-7b-instruct进行推理

目标:使用python的llama_cpp运行qwen2.5vl模型实现提交图片和文本回答文本效果 遇到的问题: 和提交信息的判断关键点llama.cpp 作为一个用 C/C 编写的轻量级大语言模型推理框架,让你能在各种硬件上高效运行模型。它通过降低部署和运行大模型的…

PDF,HTML,md格式文件在线查看工具

VUE3 实现了 PDF,HTML,md格式文件在线查看工具 在线体验地址: http://114.55.230.54/ 实现了一款漂亮的PDF,HTML,md格式文件在线查看网页工具 1、PDF预览1.1 实现代码 <script setup> import { ref, watch, computed } from vue// 状态管理 const files ref([]) // 存储…

CPP学习之map和set

1. 关联式容器 在之前博客中我们提到过序列式容器&#xff1a;vector, list, deque, forward_list等&#xff0c;其底层都是线性数据结构。 关联式容器存储的是键值对–<key, value>&#xff0c;与序列式容器仅存储值–key不一样&#xff0c;在数据检索时比序列式容器效…

深入理解C++中的移动赋值与拷贝赋值函数——兼论移动构造函数及其实际应用场景

技术博客&#xff1a;深入理解C中的移动赋值与拷贝赋值函数——兼论移动构造函数及其实际应用场景引言在C编程中&#xff0c;对象的赋值和构造操作是常见的需求。随着C11标准的引入&#xff0c;移动语义&#xff08;Move Semantics&#xff09;成为提升程序性能的重要手段之一。…

免费在线图片合成视频工具 ,完全免费

免费在线图片合成视频工具 &#xff0c;完全免费 免费在线图片合成视频工具是一个完全免费的图片生成视频网站、图片和音乐合成视频网站。 它完全免费&#xff0c;无需注册登录&#xff0c;可以轻松将多张图片转换为视频&#xff0c;支持 jpeg 、png 、webp 格式图片&#xf…

金仓数据库 V9 体验测评:AI 时代国产数据库 “融合” 架构的真实观察

【非广告声明】本文为本人基于金仓数据库 V9 的真实部署测试与技术拆解&#xff0c;无任何商业合作背景&#xff0c;未接受品牌方任何形式的推广委托或费用支持。写作核心是分享国产数据库在 “融合架构”“AI 赋能”“平滑迁移” 等关键场景下的实际使用体验 —— 包括技术细节…

EE进阶1:Maven和SpringBoot基本介绍

Maven什么是mavenMaven简单的理解就是一个项目管理工具&#xff0c;使用pom.xml文件进行管理和获取.jar包&#xff0c;而不用手动进行添加.jar包。创建maven项目以及使用Maven的功能非常多&#xff0c;这里主要理解Maven的项目创建和依赖管理。项目创建&#xff1a;maven本身是…

【系统架构设计(三)】系统工程与信息系统基础下:企业信息化与电子商务-数字化转型的核心驱动力

文章目录一、信息化的基本概念1、 信息化的定义与目的2、 信息化涉及的三大创新3、信息化需求的三个层次二、企业信息化六大方法体系三、信息系统战略规划方法1、 战略规划方法的演进2、 关键成功因素法&#xff08;CSF&#xff09;3、 战略集合转化法&#xff08;SST&#xff…

分布式2PC理论

目录 什么是分布式 2PC&#xff08;Two-Phase Commit&#xff09; 2PC 的工作原理 2PC 的优缺点 为什么 2PC 不完全可靠&#xff1f; 超时问题 协调者故障 什么是分布式 2PC&#xff08;Two-Phase Commit&#xff09; 定义 2PC 是一种原子提交协议&#xff0c;用…

【原创】PDF一键导出图片多张图片一键合成PDF

一、界面功能介绍&#xff1a;PDF输出图片和图片合成PDF二合一 开发动力&#xff1a;WPS有此功能需要VIP收费&#xff0c;其他小软件不能满足我的要求 依赖&#xff1a;友好界面组件&#xff0c;pdf输出图片组件&#xff0c;合并组件 NET8.0&#xff08;NetCore.Winform&#x…