【发布时间】:2013-07-19 16:34:55
【问题描述】:
所以我正在创建一个 vim 脚本,该脚本需要将 JSON 文件加载并解析到本地对象图中。我进行了搜索,但找不到任何处理 JSON 文件的本机方式,并且我不想向脚本添加任何依赖项。所以我编写了自己的函数来解析 JSON 字符串(从文件中获取),但它真的很慢。目前,我像这样遍历文件中的每个字符:
let len = strlen(jsonString) - 1
let i = 0
while i < len
let c = strpart(jsonString, i, 1)
let i += 1
" A lot of code to process file....
" Note: I've tried short cutting the process by searching for enclosing double-quotes when I come across the initial double quotes (also taking into account escaping '\' character. It doesn't help
endwhile
这个方法我也试过了:
for c in split(jsonString, '\zs')
" Do a lot of parsing ....
endfor
作为参考,处理约 29,000 个字符的文件大约需要 4 秒,这是不可接受的。
有没有更好的方法来遍历 vim 脚本中的字符串?
或者更好的是,我是否错过了解析 JSON 的本机函数?
更新:
我要求不依赖,因为我:
- 不想和他们打交道
- 真心想要一些想法,以找到无需他人工作的最佳方式。
- 有时我只是喜欢手动操作,即使问题已经解决了。
我根本不反对插件或依赖项,只是我很好奇。因此问题。
我最终创建了自己的函数来解析 JSON 文件。我正在创建一个可以解析与 node.js 模块关联的 package.json 文件的脚本。因此,只要我检索到所需的信息,我就可以依靠相当一致的格式并退出处理。这通常会删除文件的大块,因为大多数开发人员将文件的最大块,即他们的“自述文件”部分放在最后。因为package.json 文件是严格定义的,所以我让这个过程有些脆弱。它假定一个根字典{ } 并积极寻找某些条目。你可以在这里找到脚本:https://github.com/ahayman/vim-nodejs-complete/blob/master/after/ftplugin/javascript.vim#L33。
当然,这并不能回答我自己的问题。这只是我独特问题的解决方案。我会等几天等待新的答案,并在赏金结束前挑选出最好的答案(我已经在手机上设置了闹钟)。
【问题讨论】:
-
请搜索vim.org/scripts。有几个插件可以做 JSON 解析。