All your requirements except the indentation guide are possible out of the box with minted. If you need the indentation guide, you can manually add the vertical lines with `escapeinside` and tikzmark.
```
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage{minted}
\newminted{JSON}{linenos,frame=single,framesep=10pt,style=autumn,escapeinside=??}
\newcounter{JSONcode}
\AddToHook{env/JSONcode/before}{\stepcounter{JSONcode}}
\ExplSyntaxOn
\clist_new:N \g_kyu_JSONmarks_clist
\newcommand{\JSONmark}[1]
{
\tikzmark{JSON-\theJSONcode-#1-begin}
\clist_gput_right:Nn \g_kyu_JSONmarks_clist { #1 }
}
\newcommand{\finishJSONmark}[1]{\tikzmark{JSON-\theJSONcode-#1-end}}
\AddToHook{env/JSONcode/after}
{
\begin{tikzpicture}[remember~picture]
\clist_map_function:NN \g_kyu_JSONmarks_clist \drawJSONmark
\end{tikzpicture}
\clist_gclear:N \g_kyu_JSONmarks_clist
}
\ExplSyntaxOff
\newcommand{\drawJSONmark}[1]{%
\draw[overlay,-,line width=0.5pt,gray!50,shorten >=1em,shorten <=0.3em](pic cs:JSON-\theJSONcode-#1-begin) -- (pic cs:JSON-\theJSONcode-#1-end);
}
\begin{document}
\begin{JSONcode}
?\JSONmark{1}?"builders": [
?\JSONmark{2}?{
"type": "test",
"image": "ubuntu:latest",
?\JSONmark{3}?"changes": [
"EXPOSE 123 456",
"CMD [\"/tmp/entrypoint.sh\"]"
?\finishJSONmark{3}?],
"commit": true
?\finishJSONmark{2}?}
?\finishJSONmark{1}?]
\end{JSONcode}
\end{document}
```
[![JSON code][1]][1]
[1]: https://i.sstatic.net/94vzIbKN.png