diff --git a/autoload/SpaceVim/api/data/json.vim b/autoload/SpaceVim/api/data/json.vim
index acfc36e41..3d6532486 100644
--- a/autoload/SpaceVim/api/data/json.vim
+++ b/autoload/SpaceVim/api/data/json.vim
@@ -9,6 +9,9 @@ endfunction
 let s:json['json_encode'] = function('s:json_encode')
 
 function! s:json_decode(json) abort
+    if empty(a:json) && type(a:json) == type('')
+        return ''
+    endif
     " TODO
     " support old vim version
     return json_decode(a:json)
diff --git a/autoload/SpaceVim/api/file.vim b/autoload/SpaceVim/api/file.vim
index 5704ddcd9..48258c8fb 100644
--- a/autoload/SpaceVim/api/file.vim
+++ b/autoload/SpaceVim/api/file.vim
@@ -151,6 +151,30 @@ endfunction
 
 let s:file['fticon'] = function('s:filetypeIcon')
 
+function! s:write(msg, fname) abort
+    let flags = filewritable(a:fname) ? 'a' : ''
+    call writefile([a:msg], a:fname, flags)
+endfunction
+
+let s:file['write'] = function('s:write')
+
+function! s:override(msg, fname) abort
+    let flags = filewritable(a:fname) ? 'b' : ''
+    call writefile([a:msg], a:fname, flags)
+endfunction
+
+let s:file['override'] = function('s:override')
+
+function! s:read(fname) abort       
+    if filereadable(a:fname)
+        return readfile(a:fname, '')
+    else
+        return ''
+    endif
+endfunction
+
+let s:file['read'] = function('s:read')
+
 function! SpaceVim#api#file#get() abort
     return deepcopy(s:file)
 endfunction