相关文章推荐
很拉风的罐头  ·  vscode git blame - CSDN文库·  2 周前    · 
欢快的领带  ·  Android ...·  2 周前    · 
有胆有识的玉米  ·  jdk8 ...·  2 月前    · 
安静的手套  ·  Please enter the ...·  2 月前    · 
失落的啄木鸟  ·  PyPDF2.errors.Deprecat ...·  5 月前    · 
editor.addAction({ id: 'my-get-json-path', // action unique id label: 'Get JSON Path', // action 在右键时展示的名称 precondition: null, contextMenuGroupId: 'navigation',// 右键展示位置 run(editor, args) { // 执行代码 console.log('run')

获取editor内用户当前选中 key 的 json path

example: key1:{a: [{b:222}]} },当用户选中b右键获取当前json path时可以得到 key1.a[0].b

使用editor获取当前json的string和当前用户光标所在的selection position selection 结构

"startLineNumber": 2, "startColumn": 6, "endLineNumber": 2, "endColumn": 6, "selectionStartLineNumber": 2, "selectionStartColumn": 6, "positionLineNumber": 2, "positionColumn": 6

将 json string 转成 AST

深度遍历 AST 内节点,比较节点 node loc position 和 当前光标的selection position,获取到 json path

AST 示例结构:astexplorer.net/

key1:111

对应 AST

"type": "Object", "children": [ "type": "Property", "key": { "type": "Identifier", "value": "key1", "raw": "\"key1\"", "loc": { "start": { "line": 2, "column": 5, "offset": 6 "end": { "line": 2, "column": 11, "offset": 12 "source": null "value": { "type": "Literal", "value": 111, "raw": "111", "loc": { "start": { "line": 2, "column": 13, "offset": 14 "end": { "line": 2, "column": 16, "offset": 17 "source": null "loc": { "start": { "line": 2, "column": 5, "offset": 6 "end": { "line": 2, "column": 16, "offset": 17 "source": null "loc": { "start": { "line": 1, "column": 1, "offset": 0 "end": { "line": 3, "column": 2, "offset": 19 "source": null Visual Studio Code
私信