Ordinare JSON

Strumento online gratuito per ordinare JSON. Con un clic disponi le chiavi dell'oggetto alfabeticamente o ordini gli elementi dell'array per valore. Commuta ascendente/discendente e ricorsione nelle strutture annidate.

Raccomandazioni correlate

Cos'è Ordinare JSON (JSON Sort)?

Ordinare JSON (JSON Sort) è il riordino delle chiavi all'interno di un oggetto JSON secondo un certo ordine (il più comune è alfabetico), o il riordino degli elementi in un array JSON secondo una certa regola (valore numerico, ordine lessicografico). Non cambia alcun valore o tipo di campo, solo l'ordine fisico - una tipica operazione di canonicalizzazione che allinea JSON da fonti, tempi e autori diversi in un'unica forma strutturale.

I 5 motivi principali per cui l'ordinamento JSON è necessario nella pratica: ① **Ridurre il rumore di Git Diff** - sviluppatori diversi costruiscono oggetti JSON in ordini diversi, generando enormi diff senza senso al commit. Dopo aver unificato l'ordine delle chiavi, il diff si concentra sulle modifiche reali. ② **Normalizzazione delle config** - pipeline CI/CD, centri di configurazione e servizi di Feature Flag vogliono che tutte le config di tutti gli ambienti abbiano un ordine delle chiavi coerente per facilitare audit, rollback e diff tra ambienti. ③ **Confronto dei dati** - pre-ordinare prima di usare uno strumento JSON Diff elimina le false differenze causate da ordini delle chiavi diversi. ④ **Standardizzazione delle risposte API** - i frontend che cachano o hashano le risposte vogliono un ordine delle chiavi stabile, per evitare di trattare gli stessi dati business come chiavi diverse a causa di ordini diversi. ⑤ **Leggibilità** - il JSON scritto a mano è spesso costruito campo per campo dalla logica di business; ordinarlo lo rende visivamente più ordinato.

A livello di implementazione, il nucleo dell'ordinamento JSON è ordinare ogni livello di chiavi dell'oggetto con `localeCompare`, ed elaborare gli oggetti annidati ricorsivamente. Lo strumento Ordinare JSON di GeekFormat ha due modalità: ① **Ordina per chiave** (predefinita) - riordina solo le chiavi dell'oggetto alfabeticamente, preservando l'ordine degli elementi dell'array. ② **Ordina per elemento dell'array** - ordina gli elementi dell'array per il loro ordine lessicografico di stringa serializzata. Supporta anche un interruttore di ricorsione e un interruttore ascendente/discendente. L'intero processo avviene localmente nel browser; nulla viene caricato.

Casi d'uso

  • Unifica l'ordine delle chiavi nei file di configurazione JSON del team, package.json, tsconfig.json, ecc. per ridurre il rumore di Git Diff
  • Ordina due JSON prima del confronto per eliminare false differenze dovute a ordini delle chiavi diversi, lasciando che il diff si concentri sulle modifiche reali
  • Standardizza l'ordine delle chiavi dei dati di risposta API per facilitare la cache del frontend, l'archiviazione IndexedDB e il calcolo dell'hash degli oggetti
  • Persisti le config del centro di configurazione CI/CD, del servizio Feature Flag nell'ordine delle chiavi canonico, per facilitare audit e rollback
  • Riordina grandi file di configurazione JSON o export di dati - ordinare le chiavi alfabeticamente li rende visivamente più puliti
  • Unifica l'ordine delle chiavi prima di scrivere JSON in database / Redis / coda di messaggi, per garantire il consumo idempotente a valle

Come utilizzare

  1. Incolla il contenuto JSON da ordinare nella casella di input sinistra, o clicca 'Esempio' per caricare un JSON multi-livello tipico, o carica un file .json/.txt
  2. Seleziona la modalità di ordinamento dalla barra delle opzioni in basso: predefinita 'Ordina per chiave'; passa a 'Ordina per array' se devi ordinare gli elementi dell'array
  3. Commuta il pulsante ascendente/discendente secondo necessità, seleziona o deseleziona 'Ricorsivo' (abilitato per impostazione predefinita)
  4. Clicca il pulsante 'Ordina'; la casella di output destra mostra il risultato ordinato formattato. Clicca 'Copia' o 'Scarica' per salvare come sorted.json

Funzionalità

  • Due modalità di ordinamento: supporta 'Ordina per chiave oggetto' e 'Ordina per elemento array' come modalità centrali, commutabili con un clic
  • Elaborazione ricorsiva annidata: ricorsione abilitata per impostazione predefinita, scendendo in oggetti annidati multi-livello per ordinare le chiavi a ogni livello, garantendo una struttura uniformemente ordinata
  • Interruttore Ascendente/Discendente: pulsante integrato ascendente (A-Z) / discendente (Z-A), flessibile per abitudini di lettura e requisiti di business
  • Ordine dizionario localeCompare: il confronto delle chiavi usa l'ordine del dizionario locale, ordinando correttamente cinese, caratteri speciali ed emoji
  • Preserva la struttura dei dati: regola solo l'ordine dei nomi delle chiavi e degli elementi dell'array, non aggiunge o rimuove campi, non modifica i tipi di valore
  • Esperienza rapida con dati di esempio: dati demo integrati 'zoo + alpha/beta/omega', carica con un clic per vedere l'effetto dell'ordinamento
  • Elaborazione locale per la privacy: analisi, ordinamento e formattazione avvengono localmente nel browser, nessun input inviato a un server
  • Passaggio fluido verso strumenti a valle: i risultati ordinati possono essere copiati con un clic verso Formattatore JSON, Confronto Diff, Validatore Schema, ecc.

Esempi di codice

Ordinamento delle chiavi dell'oggetto in JavaScript con Object.keys + sort

javascript
// Ordinamento ricorsivo delle chiavi, restituisce un nuovo oggetto (non modifica l'originale)
function sortKeysDeep(value) {
  if (Array.isArray(value)) return value.map(sortKeysDeep);
  if (value !== null && typeof value === 'object') {
    return Object.keys(value)
      .sort((a, b) => a.localeCompare(b))
      .reduce((acc, k) => {
        acc[k] = sortKeysDeep(value[k]);
        return acc;
      }, {});
  }
  return value;
}

const data = { zoo: { animals: ['zebra', 'elephant'] }, alpha: 1, beta: 2 };
const sorted = sortKeysDeep(data);
console.log(JSON.stringify(sorted, null, 2));
// => {
//      "alpha": 1,
//      "beta": 2,
//      "zoo": { "animals": ["zebra", "elephant"] }
//    }

Python sort_keys=True + ordinamento array

python
import json

data = {"zoo": {"animals": ["zebra", "elephant"]}, "alpha": 1, "beta": 2}

# Ordinamento alfabetico automatico alla serializzazione con sort_keys
sorted_json = json.dumps(data, indent=2, sort_keys=True, ensure_ascii=False)
print(sorted_json)

# Ordinamento array per valore
arr = [3, 1, 4, 1, 5, 9, 2, 6]
print(sorted(arr))          # numerico ascendente
print(sorted(arr, reverse=True))  # discendente

# Ordine dizionario di stringhe
print(sorted(['banana', 'Apple', 'cherry']))  # ['Apple', 'banana', 'cherry']

Ordina per chiave con jq

bash
# Ordinamento ricorsivo delle chiavi + indentazione di 2 spazi
jq -S '.' data.json

# Spiegazione: -S (--sort-keys) ordina tutte le chiavi dell'oggetto ricorsivamente in ordine ASCII ascendente

# Ordina array per ordine lessicografico di stringa dell'elemento (gli oggetti si confrontano per la loro stringa JSON)
jq 'sort' data.json

# Ordina array per un campo (es. per età ascendente)
jq 'sort_by(.age)' data.json

# Discendente
jq 'sort_by(.age) | reverse' data.json

Domande frequenti

Qual è la differenza tra Ordinare JSON e Formattare JSON?

Formattare JSON regola solo indentazione, interruzioni di riga e spazi, senza cambiare l'ordine delle chiavi. Ordinare JSON riordina l'ordine fisico dei nomi delle chiavi (alfabeticamente) o degli elementi dell'array (per valore). I due sono spesso usati insieme: prima ordina per rendere la struttura ordinata, poi formatta per rendere il contenuto leggibile - l'output finale è il JSON più pulito.

Il JSON ordinato diventerà più grande?

Il conteggio dei byte è essenzialmente invariato. L'ordinamento non aggiunge o rimuove campi, riordina solo i nomi delle chiavi, quindi il conteggio dei caratteri serializzati è quasi identico all'originale (i caratteri di indentazione possono differire di 1-2 byte).

Cambia i valori dei campi o i tipi dei campi?

No. Questo strumento è un riordino puramente strutturale: le chiavi dell'oggetto vengono riordinate, gli elementi dell'array riposizionati, valori e tipi rimangono intatti. La semantica relativa di `null`, booleani, numeri, stringhe, oggetti e array è preservata.

Posso ordinare le chiavi dell'oggetto per valore?

Questo strumento supporta attualmente due modalità: ① ordinamento per nome chiave oggetto alfabetico (l'ordine delle chiavi dell'oggetto cambia); ② ordinamento degli elementi dell'array per valore (gli elementi all'interno di un array cambiano posizione). Se devi ordinare gli elementi dell'array per il valore di un campo dell'oggetto, estrai prima quel campo in un array di livello superiore usando lo strumento JSON Path, poi usa la modalità array per ordinare.

Cosa significa ordinamento ricorsivo? Dovrei disattivarlo?

Ricorsivo = ordinamento dei nomi delle chiavi a ogni livello di oggetti annidati. Non ricorsivo = ordina solo le chiavi dell'oggetto di livello superiore; i sotto-oggetti mantengono il loro ordine originale. Nella maggior parte degli scenari raccomandiamo di mantenere la ricorsione abilitata per una struttura uniformemente ordinata. Solo quando i tuoi oggetti interni hanno una semantica di ordine specifica (es. una 'lista di priorità' nella config) disattiveresti la ricorsione.

Perché le mie chiavi intere vengono ordinate all'inizio?

Questo è un comportamento della specifica JavaScript: quando le chiavi di un oggetto sembrano interi non negativi (0, 1, 2...), il motore le itera in ordine numerico ascendente - le chiavi intere appaiono prima delle chiavi stringa. L'ordinamento di questo strumento preserva questo comportamento. Se vuoi che 'le chiavi simili a interi siano ordinate anche in ordine di stringa', usa Riparare JSON o un editor per cambiarle in chiavi stringa con apici come "0", "1".

I nomi delle chiavi cinesi possono essere ordinati per Pinyin?

Sì. Sotto il cofano questo strumento usa localeCompare di JavaScript, che ordina secondo la locale corrente del browser per impostazione predefinita. In un ambiente cinese essenzialmente ordina per Pinyin ascendente, ma il comportamento esatto varia con browser e sistema operativo. Per un ordinamento Pinyin stretto, usa una libreria Node.js che supporta le regole di confronto ICU (es. `natural-orderby`).

Come si ordinano gli oggetti in un array?

La modalità array supporta l'ordinamento degli oggetti all'interno di un array per 'l'ordine lessicografico della stringa serializzata' - ciò significa che gli oggetti vengono ordinati per il valore stringa del primo campo che differisce. Per ordinare per un campo specifico (es. price, date), usa un'operazione sort-by nello strumento JSON Path, o nel codice usa `Array.prototype.sort((a, b) => a.price - b.price)`.

Posso annullare e ripristinare l'ordine originale dopo l'ordinamento?

Questo strumento non mantiene una cronologia dell'ordine originale (per semplicità). Raccomandazioni: ① Copia l'originale negli appunti prima di modificare; ② Salva l'originale come file .json per il rollback; ③ Usa git per gestire gli originali in produzione - `git checkout` qualsiasi versione storica quando necessario.

Il risultato ordinato può essere esportato e salvato?

Sì. Clicca 'Scarica' per salvare come sorted.json; o clicca 'Copia' per mettere il risultato negli appunti e incollarlo in codice o documenti. Il file scaricato è JSON standard, consumabile da qualsiasi editor, IDE o strumento CI.

Lo strumento carica il mio JSON su un server?

No. Analisi, ordinamento e formattazione avvengono localmente nel browser; input e risultati intermedi non vengono inviati a nessun server. Funziona offline, adatto per gestire JSON sensibili (es. config interne, risposte API non pubblicate).

Qual è il miglior ordine di utilizzo con JSON Diff e Validazione Schema?

Catena raccomandata: ① Riparare JSON (pulire JSON illegale) → ② Ordinare JSON (unificare ordine delle chiavi) → ③ JSON Diff (confronto basato sul risultato ordinato, minimo rumore di diff) → ④ Formattare JSON (unificare indentazione per leggibilità) → ⑤ Validazione JSON Schema (vincoli dei campi business). Scegli i passi che ti servono.

Risoluzione dei problemi

L'ordinamento mostra errore 'Invalid JSON'

Causa: l'input non è JSON valido. Soluzione: incolla prima il JSON nello strumento Riparare JSON per pulirlo (gestisce automaticamente virgole finali, apici singoli, chiavi senza apici, ecc.), poi torna a questo strumento; oppure verifica se ti mancano graffe/parentesi esterne.

Le chiavi intere vengono ordinate all'inizio

Causa: la specifica JavaScript itera le chiavi 'che sembrano interi non negativi' in ordine numerico ascendente. Soluzione: cambia le chiavi intere in chiavi stringa ("0", "1") prima dell'ordinamento; oppure accetta questo comportamento come una funzionalità.

Gli oggetti dell'array non sono stati ordinati per il campo atteso

Causa: la modalità array ordina per l'ordine lessicografico della stringa serializzata, con il primo campo che differisce a decidere l'ordine finale. Soluzione: usa sort-by nello strumento JSON Path; oppure nel codice usa `arr.sort((a, b) => a.field - b.field)` per personalizzare il comparatore; questo strumento si rivolge principalmente a scenari di ordinamento per nome chiave.

I nomi delle chiavi cinesi non vengono ordinati come previsto

Causa: il comportamento di localeCompare varia leggermente tra browser/SO, e per il cinese usa per impostazione predefinita i punti di codice Unicode o la locale del browser. Soluzione: specifica esplicitamente la locale nel codice (es. `localeCompare('it-IT')`); oppure passa a una libreria che supporta le regole di confronto ICU per un ordinamento Pinyin stretto.

Gli oggetti annidati interni non sono stati ordinati (solo il livello esterno)

Causa: 'Ricorsivo' nella barra delle opzioni in basso non è selezionato. Soluzione: seleziona l'interruttore 'Ricorsivo' (selezionato per impostazione predefinita), riattiva l'ordinamento; anche le chiavi degli oggetti interni verranno ordinate alfabeticamente.

File di grandi dimensioni (10 MB+) fanno congelare l'ordinamento

Causa: analizzare un testo grande con JSON.parse in una volta occupa molta memoria. Soluzione: mantieni l'input entro 1-2 MB; per file enormi usa script Node.js (`Object.keys(...).sort()`) o Python (`json.dumps(..., sort_keys=True)`) localmente; usa questo strumento per piccole verifiche in seguito.

Glossario

JSON Sort
Riordino delle chiavi dell'oggetto JSON alfabeticamente o degli elementi dell'array per valore; non cambia alcun valore o tipo di campo, solo l'ordine fisico.
localeCompare
Funzione di confronto lessicografico di stringhe integrata in JavaScript che restituisce -1/0/1. Questo strumento usa localeCompare per ordinare le chiavi, gestendo correttamente cinese, caratteri speciali ed emoji.
ASCII Ascendente / Discendente
Ordinamento per punti di codice Unicode dei caratteri (tabella ASCII); lettere maiuscole A-Z prima delle minuscole a-z, cifre 0-9 prima delle lettere.
Ordinamento locale-aware
Ordinamento che rispetta le convenzioni linguistiche; per il cinese usa per impostazione predefinita i punti di codice Unicode o la locale del browser, il che differisce dall'ordinamento Pinyin stretto.
Chiave tipo intero (Integer-like Key)
Una chiave di oggetto che sembra un intero non negativo (es. "0", "1", "2"); i motori JavaScript le iterano automaticamente in ordine numerico ascendente. Comportamento di specifica, non può essere disattivato.
Ordinamento ricorsivo
Ordinamento dei nomi delle chiavi a ogni livello di oggetti annidati. Questo strumento lo abilita per impostazione predefinita; disattivandolo si ordina solo il livello superiore.
Forma canonica
Forma normalizzata; Ordinare JSON è un modo per costruire una forma canonica, facilitando diff, hash di cache e coerenza tra ambienti.
Rumore di Git Diff
Righe di diff nella code review prodotte da differenze di formato (non modifiche logiche reali); i commit con JSON con chiavi in ordine diverso generano grandi quantità di diff di rumore.
pre-commit Hook
Script che viene eseguito automaticamente prima di un commit Git; molti team invocano `jq -S .` in pre-commit per ordinare le chiavi dei file JSON prima dell'add, garantendo un ordine JSON coerente nel repository.
Strumento JSON Diff
Uno strumento (es. jsondiffpatch) che confronta due JSON per trovare le differenze; raccomandato di ordinare entrambi i lati prima, per eliminare il diff falso causato dall'ordine delle chiavi.

Scenari e Metodi di Ordinamento JSON

ScenarioOrdina perImplementazione raccomandataStrumento corrispondente
Ridurre il rumore di Git DiffChiave oggetto alfabeticajq -SQuesto strumento / jq
Normalizzazione centro di configChiave oggetto alfabeticajq -SQuesto strumento / jq
Chiave cache risposta APIChiave oggetto alfabeticaJSON.stringify(sort_keys=True)Questo strumento / Python json
Unione array API paginatiNessun ordinamentoconcatStrumento Unire JSON
Ordina array per data di creazioneElemento .created_atjq 'sort_by(.created_at)'jq sort_by
Ordina prodotti per prezzoElemento .pricelodash _.sortByJS sort((a,b)=>a.price-b.price)

Ordinare JSON vs JSON Diff vs Unire JSON

StrumentoCosa risolveDimensione di ordinamentoSolitamente abbinato a
Ordinare JSON (questo strumento)Unificare ordine chiavi/arrayChiavi / elementi arrayJSON Diff, Unire JSON
JSON DiffConfrontare due JSON per differenzeNessuna (basata sul contenuto)Ordinare (prima ordina, poi diff)
Unire JSONUnione multi-fonteOrdinabile secondo configOrdinare (normalizza dopo l'unione)
Riparare JSONConvertire JSON illegale in validoNessunaOrdinare (archivia dopo la riparazione)
Validazione JSON SchemaValidazione vincoli di campoNessunaPuò validare l'output ordinato

Authoritative References