So I'm creating a vim script that needs to load and parse a JSON file into a local object graph. I searched and I couldn't find any native way to process a JSON file, and I don't want to add any dependencies to the script. So I wrote my own function to parse the JSON string (gotten from the file), but it's really slow. At the moment, I iterate through each character in the file like so:

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

I've also tried this method:

for c in split(jsonString, '\zs')
    " Do a lot of parsing ....
endfor

For reference, a file with ~29,000 characters takes about 4 seconds to process, which is unacceptable.

Is there a better way to iterate over a string in vim script?

Or better yet, have I missed a native function to parse JSON?

Update:

I asked for no dependencies because I:

  1. Didn't want to deal with them
  2. Genuinely wanted some ideas for best way to do this without someone else's work.
  3. Sometimes I just like to do things manually even though the problem has already been solved.

I'm not against plugins or dependencies at all, it's just that I'm curious. Thus the question.

I ended up creating my own function to parse the JSON file. I was creating a script that could parse the package.json file associated with node.js modules. Because of this, I could rely on a fairly consistent format and quit the processing whenever I'd retrieved the information I needed. This usually cut out large chunks of the file since most developers put the largest chunk of the

Edit
Report