(function(){
var $=function(sel,root){return(root||document).querySelector(sel)};
var root=document.getElementById('sd-jsonfmt');if(!root)return;
var el={
input:$('#sdjf-input',root),
output:$('#sdjf-output',root),
error:$('#sdjf-error',root),
indent:$('#sdjf-indent',root),
sort:$('#sdjf-sort',root),
btnFmt:$('#sdjf-format',root),
btnMin:$('#sdjf-minify',root),
btnCopy:$('#sdjf-copy',root),
btnDl:$('#sdjf-download',root),
btnClr:$('#sdjf-clear',root)
};
function showError(msg){el.error.textContent=msg;el.error.hidden=false}
function clearError(){el.error.hidden=true;el.error.textContent=''}
function sortKeysDeep(value){
if(Array.isArray(value))return value.map(sortKeysDeep);
if(value&&typeof value==='object'){
var out={};Object.keys(value).sort(function(a,b){return a.localeCompare(b)}).forEach(function(k){out[k]=sortKeysDeep(value[k])});
return out;
}
return value;
}
function getIndent(){
var v=el.indent.value;
return v==='\\t'?'\t':(v==='\t'?'\t':(isNaN(v)?v:Number(v)));
}
function highlight(jsonText){
return jsonText
.replace(/(&|)/g,function(s){return{'&':'&','':'>'}[s]})
.replace(/("(\\.|[^"\\])*")(\s*:)?/g,function(m,str,_e,colon){
return colon
?''+str+':'
:''+str+'';
})
.replace(/\b(true|false)\b/g,'$1')
.replace(/\b(null)\b/g,'$1')
.replace(/-?\b\d+(\.\d+)?([eE][+-]?\d+)?\b/g,'$&')
.replace(/([{}\[\],])/g,'$1');
}
function formatJSON(minify){
clearError();
var raw=el.input.value.trim();
if(!raw){el.output.innerHTML='';return}
try{
var data=JSON.parse(raw);
var obj=el.sort.checked?sortKeysDeep(data):data;
var indent=minify?0:getIndent();
var pretty=JSON.stringify(obj,null,indent);
el.output.innerHTML=highlight(pretty);
}catch(e){showError('JSON-Fehler: '+e.message)}
}
function copyOutput(){
if(navigator.clipboard){navigator.clipboard.writeText(el.output.innerText);return}
var ta=document.createElement('textarea');
ta.value=el.output.innerText;
document.body.appendChild(ta);ta.select();document.execCommand('copy');ta.remove();
}
function downloadOutput(){
var text=el.output.innerText||'';
var blob=new Blob([text],{type:'application/json;charset=utf-8'});
var a=document.createElement('a');
a.href=URL.createObjectURL(blob);a.download='formatted.json';
document.body.appendChild(a);a.click();a.remove();URL.revokeObjectURL(a.href);
}
el.btnFmt.addEventListener('click',function(){formatJSON(false)});
el.btnMin.addEventListener('click',function(){formatJSON(true)});
el.btnCopy.addEventListener('click',copyOutput);
el.btnDl.addEventListener('click',downloadOutput);
el.btnClr.addEventListener('click',function(){el.input.value='';el.output.innerHTML='';clearError()});
el.input.addEventListener('input',function(){
clearError();
try{if(el.input.value.trim())JSON.parse(el.input.value)}
catch(e){showError('Noch ungültig: '+e.message)}
});
el.input.addEventListener('keydown',function(ev){
if((ev.ctrlKey||ev.metaKey)&&ev.key==='Enter')formatJSON(false);
});
})();
Mit unserem kostenlosen JSON Formatter Tool kannst du deine JSON-Daten schnell und zuverlässig formatieren, einrücken und übersichtlich darstellen. Füge dein JSON einfach ins Eingabefeld ein und erhalte auf der rechten Seite eine saubere, strukturierte Ausgabe – optional alphabetisch sortiert oder minimiert.
Das Besondere: Deine Daten bleiben absolut sicher. Alles passiert ausschließlich lokal in deinem Browser. Wir übertragen oder speichern keine Inhalte auf einem Server. Damit eignet sich das Tool auch für vertrauliche Daten, die du nicht online hochladen möchtest.
Funktionen im Überblick:
JSON formatieren mit wählbarer Einrückung (2, 4, Tabs)
Alphabetische Sortierung der Keys (optional)
Ausgabe als formatiertes JSON oder Minify
Kopieren oder als Datei herunterladen
Direkte Fehlererkennung bei ungültigem JSON
Egal ob Entwickler, Admin oder Data-Analyst – mit diesem Tool sparst du dir umständliche Online-Services und kannst JSON-Strukturen schnell lesbar machen.