JSON-Schlüssel-Sortierer

Alle JSON-Objektschlüssel rekursiv alphabetisch sortieren. Die Array-Reihenfolge bleibt erhalten.

Sortierung:
Einzug:
Beispiele:
JSON-Eingabe0 Zeichen
Sortierte Ausgabe

Hat dieses Tool Ihr Problem gelöst?

Code-Beispiele

JavaScript

// Recursive JSON key sort
function sortKeys(value, order = 'asc') {
  if (Array.isArray(value))
    return value.map(v => sortKeys(v, order));
  if (value !== null && typeof value === 'object') {
    const keys = Object.keys(value).sort(
      order === 'asc'
        ? (a, b) => a.localeCompare(b)
        : (a, b) => b.localeCompare(a)
    );
    return Object.fromEntries(
      keys.map(k => [k, sortKeys(value[k], order)])
    );
  }
  return value;
}

const sorted = JSON.stringify(
  sortKeys({ z: 3, a: 1, m: 2 }),
  null, 2
);
// { "a": 1, "m": 2, "z": 3 }

Python

import json

data = {"z": 3, "a": 1, "m": 2, "nested": {"y": 9, "b": 2}}

# Built-in sort_keys option
sorted_json = json.dumps(data, sort_keys=True, indent=2)
print(sorted_json)
# {
#   "a": 1,
#   "m": 2,
#   "nested": { "b": 2, "y": 9 },
#   "z": 3
# }

# Reverse / descending sort
def sort_keys_desc(obj):
    if isinstance(obj, dict):
        return {k: sort_keys_desc(obj[k])
                for k in sorted(obj, reverse=True)}
    if isinstance(obj, list):
        return [sort_keys_desc(v) for v in obj]
    return obj

jq (CLI)

# Sort all keys recursively (ascending)
jq 'walk(if type == "object"
  then to_entries | sort_by(.key) | from_entries
  else . end)' input.json

# One-liner for simple objects
echo '{"z":3,"a":1}' | jq -S .
# -S flag sorts keys alphabetically

# Sort and save to file
jq -S . input.json > sorted.json

Go

package main

import (
    "encoding/json"
    "sort"
)

// JSON marshaling in Go preserves map key
// order alphabetically by default.

func SortKeys(v interface{}) interface{} {
    switch val := v.(type) {
    case map[string]interface{}:
        keys := make([]string, 0, len(val))
        for k := range val { keys = append(keys, k) }
        sort.Strings(keys)
        result := make(map[string]interface{})
        for _, k := range keys {
            result[k] = SortKeys(val[k])
        }
        return result
    case []interface{}:
        for i, item := range val {
            val[i] = SortKeys(item)
        }
    }
    return v
}

// json.Marshal on map[string]interface{}
// already sorts keys alphabetically.
b, _ := json.MarshalIndent(data, "", "  ")

Häufig gestellte Fragen

Warum sollte ich JSON-Schlüssel sortieren?

Das Sortieren von Schlüsseln erleichtert den JSON-Vergleich mit Diff-Tools. Wenn zwei JSON-Objekte die gleichen Daten, aber eine unterschiedliche Schlüsselreihenfolge haben, zeigt ein Diff falsche Änderungen an. Es hilft auch bei der kanonischen Serialisierung, Standardisierung von Konfigurationsdateien und visuellen Navigation großer JSON-Objekte.

Werden verschachtelte Objekte auch rekursiv sortiert?

Ja. Der Sortierer verarbeitet rekursiv alle verschachtelten Objekte auf jeder Tiefe. Arrays behalten ihre ursprüngliche Reihenfolge bei — nur Objektschlüssel werden sortiert.

Was passiert mit Arrays im JSON?

Array-Elemente behalten ihre ursprüngliche Reihenfolge bei, da Arrays definitionsgemäß geordnet sind. Wenn ein Array Objekte enthält, werden die Schlüssel innerhalb jedes Objekts sortiert, aber die Array-Reihenfolge selbst bleibt unverändert.

Gibt es eine Größenbeschränkung für die JSON-Eingabe?

Es gibt keine explizite Begrenzung, aber sehr große JSON-Dateien (mehrere MB) können im Browser langsam verarbeitet werden. Für große Dateien empfehlen wir Kommandozeilen-Tools wie jq.

Wie kann ich JSON-Schlüssel über die Kommandozeile sortieren?

Verwenden Sie jq mit dem Filter to_entries | sort_by(.key) | from_entries oder Pythons json.dumps mit sort_keys=True. Siehe die Code-Beispiele unten.

Ändert das Sortieren von Schlüsseln die Bedeutung meines JSON?

Nein. JSON-Objekte sind als ungeordnete Sammlungen von Schlüssel-Wert-Paaren definiert, daher hat die Schlüsselreihenfolge keine semantische Bedeutung. Jeder JSON-Parser erzeugt unabhängig von der Schlüsselreihenfolge identische Ergebnisse.