vscode的json文件解析
- 0.参考链接
- 1.什么是JSON
- 2.JSON语法
- 2.0数据类型
- 2.1对象
- 2.2数组
- 2.3嵌套
- 3.vscode包含的JSON文件介绍
- 4.vscode包含的JSON文件解析
- 4.1 task.json
- 4.2 launch.json
- 4.3 settings.json
- 4.4 c_cpp_properties.json
- 4.5 package.json(详细的看参考链接)
0.参考链接
[1]VsCode的常用配置文件(.json)介绍
[2]vscode launch.json和task.json配置(重要参数详解)
[3]Vs Code中C/C++配置launch.json和tasks.json文件详细步骤
[4]vscode的json文件怎么写
[5]VS Code上C++的环境配置&tasks.json和launch.json解析
[6]图文教程 | 2024年最新VSCode下载和安装教程c/c++环境配置,json文件详解,实用插件分享
[7]VSCode插件开发核心文件package.json字段解析及核心属性解析
1.什么是JSON
JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式,例如在 PHP 中,可以将 JSON 还原为数组或者一个基本对象。在用到AJAX时,如果需要用到数组传值,这时就需要用JSON将数组转化为字符串。
2.JSON语法
2.0数据类型
– 字符串:使用双引号””包围,如 “name”: “John”。
– 数字:直接写数字,如 “age”: 20。
– 布尔值:写true或false,如 “isStudent”: true。
– 数组:使用中括号[]来表示一组值,每个值之间用逗号隔开,如 “hobbies”: [“reading”, “running”, “cooking”]。
– 对象:使用大括号{}来表示,每个键值对之间用逗号隔开,如 “address”: {“city”: “New York”, “country”: “USA”}。
2.1对象
在Json文件中,对象是由一组键值对组成的。一个键值对包括一个键(字符串类型)和一个值(可以是任意类型)。编写对象的格式如下:
"`json
{“key1”: “value1”,“key2”: “value2”,…
}
"`
2.2数组
在Json文件中,数组是由一组值组成的,每个值可以是任意类型。编写数组的格式如下:
"`json
{“key”: [“value1”,“value2”,…]
}
"`
2.3嵌套
Json文件中可以嵌套对象和数组。可以在对象中包含对象,或者在数组中包含数组。
"`json
{“obj”: {“key1”: “value1”,“key2”: “value2”},“arr”: [“value1”,“value2″]
}
"`
3.vscode包含的JSON文件介绍
配置这些文件能够使VSCode更好地理解你的C/C++项目,提供高效的代码编辑、构建和调试功能。例如,c-cpp-properties.json
可以提高代码导航和错误检测的准确性,launch.json
使得调试过程更加便捷,而task.json
则有助于自动化构建流程,提高开发效率。通过自定义这些配置,开发者可以根据自己的项目需求和工作流进行个性化设置。在.vscode
目录下,你可以找到并编辑这些配置文件,以适应你的C/C++开发环境。
(1)launch.json
launch.json
文件用于配置调试会话的参数。在这里,你可以定义多个启动配置,每个配置可以有不同的目标(如调试可执行文件、调试远程程序、调试核心转储等)。你需要指定program
为要调试的程序路径,args
为传递给程序的命令行参数,stopAtEntry
决定是否在进入main函数时暂停,以及MIMode
为调试器模式(对于C/C++通常是gdb
或lldb
)。
说明:launch.json用于 VsCode 调试程序。
注意:在高版本的 C/C++插件只会生成 launch.json 文件,而低版本的C/C++插件中会生成 launch.json 文件和 tasks.json 文件。
(2)tasks.json
task.json
文件则用来定义构建任务,这些任务可以在VSCode中运行以编译、清理或者执行其他命令。你可以创建自定义任务,如编译当前活动文件、整个项目或清理生成的中间文件。每个任务都有一个command
属性,表示要执行的命令,以及args
属性,包含命令的参数。此外,problemMatcher
属性用于解析编译器输出并高亮显示错误和警告。
说明:tasks.json用于 VsCode 执行任务,例如:执行 cmake 命令、执行 make 命令的任务等; tasks.json 不是必须的,在 VsCode 终端输入命令或者通过插件执行命令都可以代替 tasks.json 的功能。
注意:tasks.json仅在低版本的 C/C++插件中生效,高版本的C/C++插件只会生成 launch.json 文件不会生成 tasks.json 文件。
(3)settings.json
说明:settings.json允许用户根据个人喜好和项目需求深度定制 VSCode 的工作环境和功能表现。
(4)c-cpp-properties.json
这个文件是VSCode的C/C++扩展用于定义项目的编译器路径和配置属性。在这个文件中,你可以指定includePath
来添加头文件搜索路径,defines
来定义预处理器宏,intelliSenseMode
来设定代码补全和错误检查的模式。例如,如果你正在使用GCC或Clang,你可以设置compilerPath
为相应的编译器路径,并确保cppStandard
指定了合适的C++标准(如c++11
、c++14
等)
(5)package.json
package.json里面有许多信息,包括
- 依赖模块(dependencies),开发、部署的时候都需要
- 开发依赖模块(devDependencies),开发时候需要,但部署则不必。比如,grunt方面的一些东西。
- main:大概相当于程序里的main函数,是个入口,指明了入口文件。通常用在一些安装的模块里面。
package-lock.json 是在
npm install
时候生成一份文件。记录了node_modules目录下所有模块(包)的名称、版本号、下载地址、及这个模块又依赖了哪些依赖。package.json记录当前项目所依赖模块的版本信息,更新模块时锁定模块的大版本号(版本号的第一位),不能锁定后面的小版本。
npm5以前,没有package-lock.json这个文件。package.json文件会记录你项目中所需要的所有模块。当你执行npm
install的时候,node会先从package.json文件中读取所有dependencies信息,然后根据dependencies中的信息与node_modules中的模块进行对比,没有的直接下载,已有的检查更新。
因为package.json只能锁定模块的大版本号(版本号的第一位),不能锁定后面的小版本,所以你每次重新npm
install时候拉取的都是该大版本下面最新的版本。一般我们为了稳定性考虑我们不能随意升级依赖包,因为如果换包导致兼容性bug出现很难排查,
这样很容易出现问题,所以package-lock.json就是来解决包锁定不升级问题的
另外,package.json文件只记录你通过npm install方式安装的模块信息,
而这些模块所依赖的其他子模块的信息不会记录。
npm5以后,package-lock.json文件锁定所有模块的版本号,包括主模块和所有依赖子模块。当你执行npm
install的时候,node从package.json文件读取模块名称,从package-lock.json文件中获取版本号,然后进行下载或者更新。因此,正因为有了package-lock.json文件锁定版本号,所以当你执行npm
install的时候,node不会自动更新package.json文件中的模块,必须用npm install
packagename@x.x.x(指定版本号)来进行安装才会更新,package-lock.json文件中的版本号也会随着更新。
4.vscode包含的JSON文件解析
task是任务的意思,我们的编译和运行就是我们想要vscode执行的任务,为此我们要在tasks.json里写两个task:Build和Run(这里为什么不是Compile呢?是因为从源码到可执行的过程中不仅是编译(Compile),还有预编译、链接等过程,用构建(Build)来表述更合适)。除了编译和运行,我们还需要进行调试(Debug),这个就不是通过task来实现的了,而是通过launch.json文件来实现。
4.1 task.json
“label”: 对应launch.json中的 “preLaunchTask”;(一定要一致,决定了launch.json之前先运行哪个配置,tasks是一个array类型,里面理论来说可以存多个配置)
“command”: 这个是编译器的命令,相当于选择了哪个编译器 (我配置了环境变量,所以这里是g++.exe,没有配置的话可能就需要按照 路径\g++.exe来配置)
“args”:编译器后面的命令,可以和command一起看 , 连起来简便看就是 g++ -g filename -o -finame.exe
这几个综合来说就是把一个.cpp文件编译成了一个可执行文件 .exe,这就是tasks.json的主要工作内容
4.2 launch.json
vscode除了代码编辑以外,还可以进行代码的运行和调试,而此文件就是代码运行和调试必不可少的东西,在launch.json中我们会指定运行的程序的名字、传递的参数等信息
preLaunchTask":在执行launch.json之前需要先执行task.json,对应tasks.json的"label",看哪个label和他匹配,就执行哪个task
“program”:可执行的文件,相当于选择了哪个可执行文件等一下要去运行
“miDebuggerPath”:调试程序路径,这里一定要选择gdb,因为他是debug的时候用的,博主之前以为他是选择用哪个编译器,然后用的一直都是gcc/g++ 所以一直有问题,后面纠正过来就好了。(他的路径参数就需要根据自己的mingw64/bin下的路径来填)
综合来说这个launch.json就是把一个可执行文件.exe 执行起来,可以运行也可以debug。
所以这两个文件结合一下就达到了把一个.cpp文件或.c文件(这里用的是g++编译器,所以是.cpp文件,如果需要编译.c文件,只需要再配置一个gcc编译器即可)先由tasks.json编译为可执行文件filename.exe/.out (或者直接-o filename 都是可以的),然后再由launch.json把一个.exe/.out 文件执行起来。
4.3 settings.json
settings.json 文件是 VSCode 的用户或工作区设置文件。它允许你自定义 VSCode 的各种行为和外观。
用户设置 (User Settings): 这些设置会应用到你的所有 VSCode 项目和窗口。你可以在左侧的“设置”图标(通常是一个齿轮)中编辑这些设置,然后点击右上角的 … 图标并选择“在 settings.json 中编辑”来查看或修改 settings.json 文件。
工作区设置 (Workspace Settings): 这些设置仅应用于当前打开的工作区。它们通常存储在 .vscode/settings.json 文件中,位于你的工作区根目录下。
4.4 c_cpp_properties.json
主要用来设置包含头文件的路径,设置C/C++支持的版本号等。
4.5 package.json(详细的看参考链接)
{// 插件的名字,必须全部小写且不能有空格"name": "cat-extension",// 用于显示在应用市场的名称,支持中文"displayName": "cat_extension",// 对于插件的描述"description": "cat extension",// 版本号"version": "0.0.1",// 表示插件最低支持的vscode版本"engines": {"vscode": "^1.68.0"},// 插件应用市场分类"categories": ["Other"],// 插件的图标"icon":"",// 扩展的激活事件的数组,就是这个插件可以被哪些事件激活"activationEvents": ["onCommand:cat-extension.helloWorld"],// 插件的主入口"main": "./dist/extension.js",// 插件的配置项"contributes": {"commands": [{"command": "cat-extension.helloWorld","title": "Hello World"}]},"scripts": {"vscode:prepublish": "npm run package","compile": "webpack","watch": "webpack --watch","package": "webpack --mode production --devtool hidden-source-map","compile-tests": "tsc -p . --outDir out","watch-tests": "tsc -p . -w --outDir out","pretest": "npm run compile-tests && npm run compile && npm run lint","lint": "eslint src --ext ts","test": "node ./out/test/runTest.js"},// 开发依赖"devDependencies": {"@types/vscode": "^1.68.0","@types/glob": "^7.2.0","@types/mocha": "^9.1.1","@types/node": "16.x","@typescript-eslint/eslint-plugin": "^5.27.0","@typescript-eslint/parser": "^5.27.0","eslint": "^8.16.0","glob": "^8.0.3","mocha": "^10.0.0","typescript": "^4.7.2","ts-loader": "^9.3.0","webpack": "^5.72.1","webpack-cli": "^4.9.2","@vscode/test-electron": "^2.1.3"}
}
activationEvents插件的激活事件数组,在什么情况下插件会被激活,当激活事件发生时,插件将被激活。
configuration是暴露给用户的配置,用户可以从”用户设置“和”工作区设置“中修改暴露的选项。
menus为编译器或者文件管理器设置命令的菜单项,即当点击菜单项时会触发命令,至少包含两个属性
- 选中时调用的命令 command
- 何时显示这个菜单项 when