Check out the following which illustrates how you can use json in string form (from a file or wherever you want) and coerce it into an eglot-supported equivalent lisp object (it shows the round-trip serializer/parser round-trip ability). You can have both lisp and json configurations with a tiny bit of extra work.
(let* ((foo-lisp
'( :pylsp
( :plugins
( :jedi_completion ( :include_params t
:fuzzy t)
:pylint (:enabled :json-false)))))
(foo-str "{\"pylsp\":{\"plugins\":{\"jedi_completion\":{\"include_params\":true,\"fuzzy\":true},\"pylint\":{\"enabled\":false}}}}")
(foo-from-lisp (json-serialize foo-lisp
:false-object :json-false
:null-object nil))
(foo-from-str (json-parse-string foo-str
:object-type 'plist
:null-object nil
:false-object :json-false)))
(message "string from lisp:")
(pp foo-from-lisp)
(message "object from string:")
(pp foo-from-str)
(message "is object from string equal to a literal lisp object? %S" (equal foo-from-str foo-lisp)))
-Stephane