Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

45 lines (41 sloc) 1.249 kB
" vim encodes strings using ''. JSON requires ".
" dummy type which is used to encode "null"
" same could be done for true / false. But we don't use those yet
fun! json#NULL()
return function("json#NULL")
endf
fun! json#True()
return function("json#True")
endf
fun! json#False()
return function("json#False")
endf
fun! json#IntToBool(i)
return a:i == 1 ? json#True() : json#False()
endf
fun! json#Encode(thing)
if type(a:thing) == type("")
return '"'.escape(a:thing,'"').'"'
elseif type(a:thing) == type({})
let pairs = []
for [Key, Value] in items(a:thing)
call add(pairs, json#Encode(Key).':'.json#Encode(Value))
unlet Key | unlet Value
endfor
return "{".join(pairs, ",")."}"
elseif type(a:thing) == type(0)
return a:thing
elseif type(a:thing) == type([])
return '['.join(map(a:thing, "json#Encode(v:val)"),",").']'
return
elseif string(a:thing) == string(json#NULL())
return "null"
elseif string(a:thing) == string(json#True())
return "true"
elseif string(a:thing) == string(json#False())
return "false"
else
throw "unexpected new thing: ".string(a:thing)
endif
endf
" usage example: echo json#Encode({'method': 'connection-info', 'id': 0, 'params': [3]})
Jump to Line
Something went wrong with that request. Please try again.