Diberikan file dengan objek JSON besar semua pada satu baris seperti
{"versions":[{"count":2,"version":""},{"count":1,"version":"1.1.1"},{"count":14,"version":"2.9"},{...
Bagaimana saya bisa memformat ini agar dapat dibaca manusia di Vim?
Diberikan file dengan objek JSON besar semua pada satu baris seperti
{"versions":[{"count":2,"version":""},{"count":1,"version":"1.1.1"},{"count":14,"version":"2.9"},{...
Bagaimana saya bisa memformat ini agar dapat dibaca manusia di Vim?
Jawaban:
Atau Anda dapat menginstal jqyang lebih cepat (ditulis dalam C) dari manajer paket Anda (mis. sudo apt install jqDi Ubuntu / Debian, sudo dnf install jqdi Fedora / RHEL / CentOS) atau dari sumber dan kemudian di vim, ketik:
:%!jq .
:%!jqbekerja dengan baik untuk saya.
.untuk saya. Kenapa ya.
One-liner ini berfungsi baik untuk memformat JSON di Vim menjadi bentuk yang dapat dibaca manusia:
:%!python -m json.tool
:%!jq .jawabannya hari ini, karena saya melakukan lebih sedikit dengan Python dan cenderung telah jqdiinstal pada sistem saya untuk setiap pekerjaan JSON di CLI. Saya juga mendapatkan pemberitahuan untuk pertanyaan SO ini cukup sering, sehingga membantu saya untuk tidak melupakan: PI lebih suka vim dengan kustomisasi minimal, tanpa plugin, dll, yang merupakan alasan lain jqsolusinya sekarang menjadi pilihan saya.
Untuk memformat dengan cara deterministik, kita perlu mengurutkan hash. Tidak ada jawaban lain yang melakukannya untuk saya, jadi saya buat sendiri:
function! FormatJson()
python << EOF
import vim
import json
try:
buf = vim.current.buffer
json_content = '\n'.join(buf[:])
content = json.loads(json_content)
sorted_content = json.dumps(content, indent=4, sort_keys=True)
buf[:] = sorted_content.split('\n')
except Exception, e:
print e
EOF
endfunction
Pemakaian:
:call FormatJson()
jqdisebutkan dalam jawaban SebMa memiliki --sort-keysopsi yang akan melakukan pekerjaan. Tapi keren juga untuk menulis implementasi Anda sendiri :)
Jika PHP tersedia, tambahkan alat jfsebagai Formatter JSON oleh Komposer:
$ composer global require codegear/json-formatter
Kemudian Format file saat ini:
:%!jf %
Atau tambahkan keymap di vimrc:
nnoremap <Leader>jf :%!jf %<CR>
Saya menggunakan :Jsonfperintah ini . Ini bisa memformat unicode.
command! Jsonf :execute '%!python -c "import json,sys,collections,re; sys.stdout.write(re.sub(r\"\\\u[0-9a-f]{4}\", lambda m:m.group().decode(\"unicode_escape\").encode(\"utf-8\"),json.dumps(json.load(sys.stdin, object_pairs_hook=collections.OrderedDict), indent=2)))"'