spacevim/autoload/SpaceVim/api/data/json.vim
JIe 2bb7059579
Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
init
2024-08-21 14:17:26 +08:00

118 lines
3.5 KiB
VimL

"=============================================================================
" json.vim --- SpaceVim json API
" Copyright (c) 2016-2023 Wang Shidong & Contributors
" Author: Wang Shidong < wsdjeg@outlook.com >
" URL: https://spacevim.org
" License: GPLv3
"=============================================================================
let s:self = {}
let s:self._vim = SpaceVim#api#import('vim')
let s:self._iconv = SpaceVim#api#import('iconv')
function! s:self._json_null() abort
return 0
endfunction
function! s:self._json_true() abort
return 1
endfunction
function! s:self._json_false() abort
return 0
endfunction
if exists('*json_decode')
function! s:self.json_decode(json) abort
if a:json ==# ''
" instead of throw error, if json is empty string, just return an empty
" string
return ''
endif
return json_decode(a:json)
endfunction
else
function! s:self._fixvar(val) abort
if self._vim.is_number(a:val)
\ || self._vim.is_string(a:val)
\ || empty(a:val)
return a:val
elseif self._vim.is_list(a:val) && len(a:val) ==# 1
if string(a:val[0]) == string(self._json_true)
return get(v:, 'true', 1)
elseif string(a:val[0]) ==# string(self._json_false)
return get(v:, 'false', 0)
elseif string(a:val[0]) ==# string(self._json_null)
return get(v:, 'null', 0)
else
return a:val
endif
elseif self._vim.is_list(a:val) && len(a:val) > 1
return map(a:val, 'self._fixvar(v:val)')
elseif self._vim.is_dict(a:val)
return map(a:val, 'self._fixvar(v:val)')
endif
endfunction
" @vimlint(EVL102, 1, l:true)
" @vimlint(EVL102, 1, l:false)
" @vimlint(EVL102, 1, l:null)
function! s:self.json_decode(json) abort
let true = [self._json_true]
let false = [self._json_false]
let null = [self._json_null]
" we need to remove \n, because eval() do not work
let json = join(split(a:json, "\n"), '')
try
let object = eval(json)
catch
let object = ''
endtry
call self._fixvar(object)
return object
endfunction
" @vimlint(EVL102, 0, l:true)
" @vimlint(EVL102, 0, l:false)
" @vimlint(EVL102, 0, l:null)
endif
if exists('*json_encode')
function! s:self.json_encode(val) abort
return json_encode(a:val)
endfunction
else
function! s:self.json_encode(val) abort
if type(a:val) == type(0)
return a:val
elseif type(a:val) == type('')
let json = '"' . escape(a:val, '\"') . '"'
let json = substitute(json, "\r", '\\r', 'g')
let json = substitute(json, "\n", '\\n', 'g')
let json = substitute(json, "\t", '\\t', 'g')
let json = substitute(json, '\([[:cntrl:]]\)', '\=printf("\x%02d", char2nr(submatch(1)))', 'g')
return self._iconv.iconv(json, &encoding, 'utf-8')
elseif self._vim.is_func(a:val)
let s = string(a:val)
if s ==# string(self._json_null)
return 'null'
elseif s ==# string(self._json_true)
return 'true'
elseif s ==# string(self._json_false)
return 'false'
endif
elseif self._vim.is_list(a:val)
return '[' . join(map(copy(a:val), 'self.json_encode(v:val)'), ',') . ']'
elseif self._vim.is_dict(a:val)
return '{' . join(map(keys(a:val), "self.json_encode(v:val) . ':' . self.json_encode(a:val[v:val])"), ',') . '}'
else
return string(a:val)
endif
endfunction
endif
function! SpaceVim#api#data#json#get() abort
return deepcopy(s:self)
endfunction
" vim:set et sw=2: