Combinar JSON
Eina gratuïta en línia per combinar JSON que fusiona diversos objectes JSON en un de sol amb l'estratègia que triïs (Deep/Shallow/Array Concat/Array Replace). Ofereix 4 modes de resolució de conflictes i és ideal per a l'agregació de dades multi-font, capes de configuració i combinació de fitxers i18n.
Relacionats
Què és la combinació de JSON (JSON Merge)?
La combinació de JSON (JSON Merge) és l'operació de fusionar dos o més objectes JSON en un de nou segons regles determinades. És una operació molt freqüent en enginyeria: ① Fusionar les respostes JSON de diversos microserveis en una resposta unificada (capa d'agregació BFF); ② Combinar la configuració base, la de l'entorn i la de l'usuari segons la lògica de "l'entorn sobreescriu" per generar la configuració final (Node.js config, Viper, Spring Cloud Config); ③ Fusionar, sobreescriure i completar diversos fitxers de traducció i18n en un diccionari complet; ④ Combinar diversos arrays de dades mock en dades de prova completes; ⑤ Fusionar diverses respostes paginades d'API en un conjunt complet de resultats.
La dificultat de la combinació no rau en "unir", sinó en "com resoldre els conflictes". Hi ha 4 estratègies habituals de resolució de conflictes: ① **Deep Merge (fusió profunda)**: entra recursivament en els objectes niats i combina cada clau per separat; només sobreescriu quan hi ha conflicte en nodes fulla. Ideal per a capes de configuració; ② **Shallow Merge (fusió superficial)**: només combina les claus de nivell superior; les claus homònimes se sobreescriuen completament. La semàntica més simple, equivalent a `Object.assign`; ③ **Array Concat (concatenació d'arrays)**: els valors de tipus array es concatenen en un array llarg mantenint l'ordre de tots els elements. Ideal per a agregació d'APIs; ④ **Array Replace (substitució d'arrays)**: els valors de tipus array se sobreescriuen directament amb els de l'última entrada. Ideal per a sobreescriptura de configuracions.
A nivell d'implementació, la fusió profunda normalment utilitza recursivitat basada en pila: primer es comprova que ambdós costats són objectes plans (no arrays, no null), i després es processa cada clau recursivament; quan es troben tipus inconsistents (per exemple, una clau que és objecte en un costat i array en l'altre), generalment es tracta segons "l'última entrada té prioritat", sense fer conversió de tipus. L'eina de combinació JSON de GeekFormat integra les 4 estratègies esmentades, que es poden canviar directament a la pàgina; s'hi poden enganxar de 2 a N fragments de JSON alhora, que es combinen automàticament en ordre, i el resultat es mostra amb format unificat. Tot el procés de combinació es fa localment al navegador; les dades originals no s'enviïn a cap servidor.
Casos d'ús
- Combinar les respostes de diverses API de microserveis en una estructura JSON unificada per al frontend
- Agregar fitxers de configuració de múltiples capes base/dev/prod i generar la configuració final per entorn
- Combinar, deduplicar i completar diversos fitxers de traducció i18n per idioma en un diccionari complet
- Fusionar diversos arrays de dades mock o respostes paginades d'API en un conjunt de dades complet
- En components frontend, combinar la configuració per defecte, la de l'usuari i la d'experiments A/B remots
- En migracions de dades, combinar fitxers d'exportació JSON de diversos sistemes font i unificar-los en un format de destinació
Com usar-ho
- Enganxa successivament de 2 a N fragments de JSON que vulguis combinar en els camps d'entrada de l'esquerra (2 per defecte), o fes clic a «+» per afegir més entrades
- Al desplegable de la barra d'eines, selecciona l'estratègia de combinació: Deep Merge (fusió profunda) / Shallow Merge (fusió superficial) / Array Concat (concatenació) / Array Replace (substitució)
- Fes clic al botó «Combina»; el camp de sortida de la dreta mostrarà el resultat formatat de la combinació; si hi ha errors de sintaxi es mostrarà el número de línia concret i el missatge d'error
- Un cop verificat el resultat, fes clic a «Copia» per posar el resultat al porta-retalls, o a «Descarrega» per desar-lo com a fitxer merged.json i continuar amb el formatat, validació d'esquemes i altres processos posteriors
Característiques
- 4 estratègies de combinació: Deep Merge / Shallow Merge / Array Concat / Array Replace, commutables amb un clic per satisfer diferents escenaris de negoci
- Suport de 2 a N fragments de JSON: 2 camps d'entrada per defecte, amb el botó «+» es poden afegir dinàmicament més fonts JSON, adaptant-se flexiblement a l'agregació multi-font
- Fusió recursiva profunda: processa intel·ligentment objectes multi-niats, resol conflictes de nodes fulla segons l'estratègia seleccionada i conserva tots els camps vàlids
- Resolució flexible de conflictes: els conflictes de nivell superior s'executen segons l'estratègia triada; els conflictes en objectes niats entren en fusió profunda; els conflictes d'arrays es tracten diferenciant entre arrayConcat i arrayReplace
- Sortida amb format unificat: el resultat combinat es mostra amb sagnia de 2 espais, facilitant la revisió manual i la còpia directa a eines posteriors
- Combinació en temps real: en enganxar i fer clic a «Combina» s'obté el resultat a l'instant; en cas d'error es mostra el número de línia concret i el missatge d'error
- Processament local per protegir la privacitat: l'anàlisi, la combinació i el formatat es fan completament al navegador, sense enviar el contingut a cap servidor
- Continuïtat amb eines posteriors: el resultat combinat es pot copiar amb un clic a eines de formatat JSON, validació d'esquemes, generació de codi i més
Exemples de codi
Fusió profunda en JavaScript amb lodash merge
javascript// npm install lodash.merge
import merge from 'lodash.merge';
const a = { user: { name: 'Alice', age: 28 }, tags: ['admin'] };
const b = { user: { email: 'a@x.com', age: 29 }, tags: ['editor'] };
// Fusió profunda: els objectes niats es combinen recursivament, els nodes fulla se sobreescriuen per l'última entrada
const deep = merge({}, a, b);
console.log(deep);
// => { user: { name: 'Alice', age: 29, email: 'a@x.com' }, tags: ['admin', 'editor'] }
// Fusió superficial: les claus de nivell superior se sobreescriuen completament, no s'entra en els niats
const shallow = Object.assign({}, a, b);
console.log(shallow);
// => { user: { email: 'a@x.com', age: 29 }, tags: ['editor'] }Fusió profunda en Python amb mergedeep
python# pip install mergedeep
from mergedeep import merge
a = {"user": {"name": "Alice", "age": 28}, "tags": ["admin"]}
b = {"user": {"email": "a@x.com", "age": 29}, "tags": ["editor"]}
# Fusió profunda
result = merge(a, b)
print(result)
# => {'user': {'name': 'Alice', 'age': 29, 'email': 'a@x.com'}, 'tags': ['admin', 'editor']}
# Nota: mergedeep per defecte combina arrays i sobreescriu cadenes/números
# Per sobreescriure arrays, afegeix strategy='override'Combinar múltiples JSON des de la línia d'ordres amb jq -s
bash# Combina diversos arrays JSON en un array llarg
jq -s 'add' a.json b.json c.json
# Combina recursivament diversos objectes JSON (jq 1.6+)
jq -s 'reduce .[] as $item ({}; . * $item)' a.json b.json
# Fusió superficial: sobreescriu les claus de nivell superior de b sobre a
jq -s '.[0] * .[1]' a.json b.json
# Després de combinar arrays, conserva només els camps id únics
jq -s '[.[].items[]] | unique_by(.id)' a.json b.jsonPreguntes freqients
La combinació JSON i la concatenació JSON són el mateix?
No exactament. «Concatenar» normalment significa unir cadenes directament, sense estructura; «combinar» significa fusionar recursivament diversos objectes segons l'estructura JSON, resolent conflictes de claus. Aquesta eina fa referència a aquesta darrera: la combinació JSON estructurada.
Com triar entre fusió profunda i fusió superficial?
Fusió superficial (Shallow Merge): només processa les claus de nivell superior, les claus homònimes se substitueixen completament, semblant a `Object.assign`, la més simple i directa. Fusió profunda (Deep Merge): entra recursivament en objectes niats i combina cada node fulla per separat, més intel·ligent. Si els diversos JSON afegeixen camps en diferents subcamins (com ara base.user.name amb override.user.email), utilitza la fusió profunda; si vols substituir un sots-objecte sencer d'un sol cop, utilitza la fusió superficial.
En combinar arrays, es fa per ordre o per índex?
Aquesta eina utilitza per defecte la semàntica de «concatenació»: fusiona diversos arrays en un de sol mantenint l'ordre de tots els elements. Si els dos arrays tenen la mateixa longitud i vols sobreescriure element per element segons l'índex, canvia a «arrayReplace» i embolcalla manualment l'array amb una estructura d'objecte.
Quan hi ha conflicte de claus, com es decideix qui sobreescriu a qui?
Segons l'ordre d'entrada: el JSON posterior sobreescriu les claus homònimes de l'anterior (en estratègies shallow/arrayReplace se sobreescriu completament, en deep merge només se sobreescriuen els nodes fulla). Si vols que «la primera entrada tingui prioritat», simplement inverteix l'ordre de les entrades.
Es poden combinar arrays JSON?
Sí. Hi ha dos escenaris típics: ① Diversos JSON són tots arrays → utilitza «arrayConcat» per concatenar-los en un array llarg; ② Diversos JSON són objectes i algun camp és un array → utilitza «arrayConcat» per combinar els arrays, o «arrayReplace» per donar prioritat a l'última entrada.
Es poden combinar més de 2 JSON alhora?
Sí. Per defecte hi ha 2 camps d'entrada; fent clic al botó «+» es poden afegir dinàmicament més camps; totes les entrades es combinen seqüencialment de dalt a baix. Teòricament no hi ha límit de quantitat, però la memòria del navegador limita la mida de cada fragment.
Com es determina l'ordre de les claus després de combinar?
En fusió profunda: l'ordre de claus del primer JSON té prioritat; les claus noves del segon JSON s'afegeixen al final del nivell corresponent. En fusió superficial: segons l'ordre d'entrada, totes les claus del primer JSON apareixen primer, i les claus noves dels JSON posteriors s'afegeixen al nivell superior; les claus homònimes conserven l'ordre del primer.
L'eina modifica els tipus dels camps?
No modifica els tipus de forma activa. Si en estratègies shallow/arrayReplace dues claus homònimes són una objecte i una array, se sobreescriuen directament segons «l'última entrada té prioritat», sense conversió de tipus. La fusió profunda només recorre quan «ambdós costats són objectes plans»; en tots els altres casos se sobreescriu.
Es conserven els valors null?
Sí. null és un valor vàlid en JSON, i aquesta eina tracta null com un valor fulla normal: en shallow/arrayReplace, el null de l'última entrada sobreescriu el valor anterior; en deep merge, en trobar null s'apliquen les regles de sobreescriptura i no s'omet de forma especial.
Després de combinar es mostren estadístiques?
Sí. L'àrea de resultats mostra el nombre de fragments JSON que han participat en la combinació i el nombre total de claus, per facilitar-ne la verificació ràpida; per a la llista detallada de camps, consulta directament la sortida formatada a la dreta.
L'eina envia el meu JSON a un servidor?
No. L'anàlisi, la combinació i el formatat es fan completament al navegador; les entrades i els resultats intermedis no s'enviïn a cap servidor. Es pot utilitzar sense connexió, i és adequada per processar JSON multi-font que contingui informació sensible (com ara configuracions de producció o respostes internes d'API).
Quin és l'ordre òptim per utilitzar-la juntament amb el formatador i la validació d'esquemes?
Cadena recomanada: ① Reparació JSON (neteja de JSON no vàlid) → ② Aquesta eina de combinació JSON (combinació multi-font) → ③ Formatador JSON (sagnia unificada) → ④ Validació JSON Schema (verificació de l'estructura final) → ⑤ Generació de codi posterior (TypeScript / Java / Go, etc.). Selecciona només els passos que necessitis.
Solució de problemes
En combinar apareix «Unexpected token» o «Invalid JSON»
Causa: com a mínim un dels camps d'entrada conté JSON no vàlid. Solució: primer enganxa el JSON erroni a l'eina de «Reparació JSON» per netejar-lo (tracta automàticament comes finals, cometes simples, claus sense cometes, etc.), i després torna a aquesta eina per combinar; o comprova si has omès les claus o corxets exteriors.
Alguns camps no apareixen després de combinar
Causa: en estratègies shallow/arrayReplace, les claus homònimes han estat sobreescrites completament per l'última entrada; en deep merge, els camps amb valor null també sobreescriuen els objectes anteriors. Solució: canvia l'estratègia a «Deep Merge» i revisa capa per capa; si confirmes que un null posterior està sobreescrivint, elimina el camp null del JSON posterior o substitueix-lo per un valor provisional.
Els arrays s'han sobreescrit en lloc de concatenar-se
Causa: l'estratègia actual és «Shallow Merge» o «Array Replace». Solució: canvia al desplegable de la barra d'eines a «Array Concat (concatenació)»; o combina manualment els dos arrays en un de sol abans de combinar.
En el resultat de la fusió profunda, un objecte s'ha convertit en array o a l'inrevés
Causa: els dos JSON tenen tipus inconsistents «objecte vs array» en el mateix camí; la fusió profunda, en trobar tipus inconsistents, aplica «l'última entrada té prioritat». Solució: unifica els tipus d'ambdós costats (canvia'ls tots dos a objecte o tots dos a array), o utilitza una estratègia shallow/arrayReplace per tenir una semàntica explícita.
L'ordre de les claus s'ha desordenat després de combinar
Causa: les claus noves del segon JSON s'afegeixen segons la «posició d'inserció» després del primer JSON; els navegadors i analitzadors ordenen automàticament numèricament les claus que són enters purs. Solució: primer utilitza l'eina d'«Ordenació JSON» en tots els JSON d'entrada per unificar l'ordre de les claus, i després combina; o torna a ordenar abans d'utilitzar el resultat.
La combinació de fitxers grans (10 MB+) es bloqueja
Causa: el JSON.parse del navegador amb múltiples fragments de text grans alhora consumeix molta memòria. Solució: mantingueu cada entrada per sota d'1-2 MB; processa fitxers molt grans localment amb scripts de Node.js (lodash.merge) o Python (mergedeep); després utilitza aquesta eina per a una verificació ràpida.
Glossari
- JSON Merge
- Operació de fusionar dos o més objectes JSON en un de nou segons regles especificades; el repte clau és "l'estratègia de resolució quan hi ha conflicte de claus".
- Deep Merge / Fusió profunda
- Estratègia que entra recursivament en objectes niats i combina cada node fulla per separat; quan ambdós costats són objectes plans es recorre, altrament se sobreescriu.
- Shallow Merge / Fusió superficial
- Estratègia que només combina les claus de nivell superior i sobreescriu completament les claus homònimes; en JS equival a `Object.assign({}, a, b)`.
- Array Concat / Concatenació d'arrays
- Una de les estratègies de combinació d'arrays: fusiona diversos arrays en un de sol mantenint l'ordre de tots els elements; s'usa sovint per a l'agregació de respostes d'API.
- Array Replace / Substitució d'arrays
- Una de les estratègies de combinació d'arrays: els arrays homònims se sobreescriuen completament amb els de l'última entrada; s'usa sovint per a sobreescriptura de configuracions.
- Object.assign
- Mètode integrat de JavaScript que copia superficialment totes les propietats enumerables pròpies d'un o més objectes font a l'objecte destí; la implementació de referència de la fusió superficial.
- lodash.merge
- Funció de fusió profunda proporcionada per la llibreria Lodash; la implementació de deep merge més utilitzada en l'ecosistema Node.js; combina arrays en lloc de sobreescriure'ls.
- mergedeep (Python)
- Llibreria de fusió profunda de l'ecosistema Python, s'instal·la amb pip install mergedeep; admet el paràmetre strategy per controlar el comportament de combinació/sobreescriptura d'arrays.
- jq -s 'add'
- Comanda jq que suma diversos arrays JSON en un de sol; per combinar objectes JSON cal utilitzar `reduce .[] as $item ({}; . * $item)`.
- BFF (Backend for Frontend)
- Capa d'agregació situada entre el frontend i els serveis backend en arquitectures de microserveis; sovint necessita combinar les respostes JSON de diversos serveis en una resposta unificada, un escenari clàssic de combinació JSON.
Comparació de les 4 estratègies de combinació JSON
| Estratègia | Àmbit | Tractament d'arrays | Escenari típic |
|---|---|---|---|
| Deep (fusió profunda) | Recorre tots els nivells niats | Segons arrayConcat/arrayReplace | Capes de configuració multi-entorn, combinació de diccionaris i18n |
| Shallow (fusió superficial) | Només nivell superior | Sobreescriptura completa | Sobreescriptura simple estil Object.assign |
| Array Concat (concatenació) | Nivell superior | Concatena en un nou array | Agregació d'APIs paginades, combinació de dades mock |
| Array Replace (substitució) | Nivell superior | Última entrada té prioritat | Sobreescriptura de Feature Flags |
Taula comparativa d'implementacions habituals
| Implementació/Llibreria | Llenguatge | Comportament per defecte | Notes |
|---|---|---|---|
| Object.assign | JavaScript | Fusió superficial | Llibreria estàndard ES2015; des d'ES2017 es pot utilitzar `Object.assign({}, a, b)` |
| { ...a, ...b } | JavaScript | Fusió superficial | Operador spread, sintaxi més concisa |
| lodash.merge | JavaScript | Fusió profunda | Combina arrays sense sobreescriure, npm install lodash.merge |
| mergedeep | Python | Fusió profunda | Amb strategy='override' canvia la combinació d'arrays per sobreescriptura |
| deepmerge (Python) | Python | Fusió profunda | Una altra implementació popular, pip install deepmerge |
| jq -s 'add' | Shell | Suma d'arrays | Per combinar objectes cal `reduce .[] as $i ({}; . * $i)` |
Authoritative References
- Comprimir JSON
- CSV a JSON
- JSON a CSV
- JSON Diff
- JSON Escape / Unescape
- Aplanar JSON
- JSON Formatter
- Generador de JSON
- Consulta JSONPath
- Combinar JSON
- Reparació JSON
- Validador d'Esquema JSON
- Ordenar JSON
- JSON Stringify
- JSON a HTML
- JSON a Java
- JSON a Markdown
- JSON a SQL
- JSON a TOML
- JSON a TypeScript
- XML a JSON
- Converteix JSON a XML
- YAML a JSON
- JSON → YAML
- JSON a Python
- JSON a Go
- JSON a Rust
- JSON a Swift
- JSON a C#
- JSON a C++
- JSON a PHP