The built-in $VIMRUNTIME/syntax/json.vim
uses Vim’s conceal feature to hide the quotes, presumably to remove unnecessary clutter.
You must have enabled concealing by setting the 'conceallevel'
option to 2
or 3
; the default is 0
(off). Likewise, you see the quotes in visual mode because of your 'concealcursor'
setting.
Inside a JSON file, check where the conceal options got set:
:verbose set conceallevel? concealcursor?
Then, you can adapt your settings to suit your preferences.