Possiamo sostituire completamente XML con JSON? [chiuso]


78

Sono sicuro che molti sviluppatori hanno familiarità con XML e JSON e li hanno usati entrambi. Quindi inutile spiegare cosa sono e quali sono i loro scopi, anche in breve.

Se proviamo a mappare i loro concetti, possiamo dire (correggimi se sbaglio):

  1. I tag XML sono equivalenti a JSON {}
  2. Gli attributi XML sono equivalenti alle proprietà JSON
  3. La raccolta di tag XML è equivalente a JSON []

L'unica cosa che mi viene in mente, che non esiste in JSON, è XML Namespace .

La domanda è, considerando questa mappatura e considerando che JSON è molto più leggera in questa mappatura, possiamo vedere un mondo in futuro (o almeno teoricamente pensare a un mondo) senza XML, ma con JSON che fa tutto ciò che XML fa? Possiamo usare JSON ovunque sia utilizzato XML?

PS: Nota che ho visto questa domanda. È qualcosa di completamente diverso da quello che sto chiedendo qui. Quindi, per favore, non menzionare il duplicato .


14
Possiamo (e dovremmo) sostituire tutte quelle cose mal progettate esagerate con espressioni S, ovviamente. Il mondo senza XML sarebbe davvero un posto molto migliore, ma purtroppo non è altro che un pio desiderio.
SK-logic,

19
Ugh. Detesto queste domande. Penso che questo sia davvero un caso per utilizzare lo strumento giusto per il lavoro, e non se si può sostituire completamente un altro. Ci sono così pochi assoluti al mondo, anche con i computer. Non potevo immaginare di fare nessuna delle cose che faccio con JSON, almeno dove si trovano ora le rispettive tecnologie.
Philip Regan,

2
@Philip, questa non è una domanda per demolire qualcosa. Cerca solo di vedere cosa manca a JSON, in modo che possiamo migliorarlo. :)
Saeed Neamati,

4
Una discussione sulle differenze tra due tecnologie per vedere dove è possibile apportare miglioramenti è molto diversa dal chiedere se si può sostituire una con l'altra. La prima è una recensione più accademica della seconda che sembra più antagonista della frustrazione di qualsiasi altra cosa
Philip Regan,

12
Questo non è ipotetico. JSON sembra mancare di una funzionalità di XML.
S.Lott

Risposte:


153

La cosa che dà a XML la sua potenza e molta della sua complessità è il contenuto misto. Roba del genere:

<p>A <b>fine</b> mess we're in!</p>

Non provare nemmeno a farlo in JSON, o manipolarlo in linguaggi di programmazione convenzionali. Non sono stati progettati per il lavoro.

Questo tipo di domanda di solito viene da persone che dimenticano che la M in XML sta per markup. È un modo per prendere testo semplice e aggiungere markup per creare testo strutturato. È abbastanza utile anche per i dati vecchio stile, ma non è quello per cui sono stati progettati o dove risiedono i suoi principali punti di forza. Esistono molti modi per gestire dati semplici e JSON è uno di questi.


33
+1: questa è la caratteristica distintiva. Punto eccellente.
S.Lott

7
@Michael, mi hai appena insegnato qualcosa di prezioso. Questa è un'ottima risposta +1.
Saeed Neamati,

9
.... Ci sono 3 nodi indie di P A ,, l'elemento B, e `pasticcio in cui ci troviamo!`. È un array, che puoi semplicemente spiegare in JSON.
Incognito

5
@Rob No, ma sto spiegando che potresti definire le cose espresse dall'HTML in maggiore chiarezza e forse un'analisi più rapida tramite JSON (poiché è necessario meno analisi del testo per trovare i diversi tipi di nodi). Se HTML fosse JSON-ML, potremmo avere più sviluppatori che comprendono effettivamente il DOM, i nodi di testo e i binding.
Incognito,

5
@ByrneReese: sì è XML e sì è valido. Che sia anche HTML è un altro punto; infatti, XHTML è anche XML valido. :-)
Martijn,

31

La differenza principale, credo, sta nel fatto che XML è progettato per essere autoesplicativo con il suo dtd e tutto.

Con JSON, devi assumere molte informazioni sui dati che stai ricevendo.


7
"XML è progettato per essere autoesplicativo". Potete fornire un link o un riferimento per questo? Non lo vedo negli standard W3C per XML e mi chiedo da dove provenga questa nozione. Mi sembra una leggenda urbana più di un obiettivo di design dichiarato.
S.Lott

6
@ S.Lott: Penso che ciò che intende dire sia la natura dei tag XML, in sé e per sé, consente al contenuto taggato di essere autoesplicativo, vale a dire che i DTD sono opzionali, quindi un XML ben formato può essere analizzato senza uno. Ma sono d'accordo con la tua opinione sulla questione perché, tecnicamente, JSON ha le stesse capacità, quindi non vedo affatto la spiegazione di sé come principale differenza (non sono sicuro del motivo per cui questo continua a essere votato), ma piuttosto Michael Kay è più in vista.
Philip Regan,

5
@ S.Lott concordato. Dovrei dire che il JSON qui json.org/example.html è più facile da capire e meglio auto-documentato rispetto all'XML associato a causa della sua mancanza di verbosità.
Doug T.

4
@Michael Borgwardt: senza un completo XSD (incluso un qualche tipo di supporto ontologico) i nomi dei tag non mi dicono nulla. "significativo" è difficile da realizzare in generale. Ciò non mi rende chiaro cosa significhi "autoesplicarsi" nella risposta. E non ho prove che fosse nemmeno un obiettivo di progettazione per XML.
S.Lott

4
@Philip Regan: come con il "codice che si spiega da sé", sembra non essere una caratteristica di XML. Se è solo un obiettivo di implementazione universale che si applica a tutti i linguaggi software (codice, accesso ai dati, markup, qualunque cosa), forse le persone non dovrebbero menzionarlo specificamente in XML.
S.Lott

21

Una traduzione letterale in JSON è spesso meno concisa e meno chiara. Tener conto di:

<foo>
   <x:bar x:prop1="g">
      <quuz />
   </bar>
</foo>

La rappresentazione JSON più efficace che ho visto di questo:

{"localName":"foo",
 "children": // you need to have a special array to hold all children
 [
    {"localName": "bar",
     "namespace": "x"
        // once again, to ensure that there are no collisions,
        // attributes should be brought out into their own JSON structure 
        "attributes":[
            {"localName":"prop1",
             "namespace":"x",
             "value":"g"}
        ],
         "children":[
             {"name":"quux"}
         ]
     }
 ]}

Ora, immaginalo per un intero file XML. Non sto dicendo che JSON non abbia il suo posto, ma XML non dovrebbe essere escluso.


8
Consideriamo ora SXML:(foo (x:bar (@ (x:prop1 "g")) (quuz)))
SK-logic,

2
@ SK-Logic: è fantastico per un esempio banale, ma non potrei immaginare di fare un contenuto profondamente annidato e misto, come un libro, con quello. Penso che SXML sia tanto un esercizio accademico quanto qualsiasi altra cosa.
Philip Regan,

3
@Philip Regan: come può essere più difficile scrivere una S-Exp che usare la chevronite, quando si tratta di una banale trasformazione 1: 1 in una forma meno prolissa?
maaartinus,

@maartinus: Il mio campo di competenza è quello della pubblicazione di libri: libri di testo di qualsiasi tipo sono animali profondi e complessi con una vasta gamma di contenuti che richiedono una gestione esplicita. DocBook e DITA sono molto più leggibili dell'esempio sopra riportato.
Philip Regan,

1
@Philip Regan, SXML è molto facile da modificare, al contrario di XML. E naturalmente è una scelta molto migliore per i protocolli, inutile menzionare la superiorità degli strumenti disponibili.
SK-logic,

14

JSON e XML sono entrambi modi per formattare i dati. Entrambi sono in grado di farlo perfettamente bene, quindi JSON può fare tutto ciò che XML fa? Sì.

Ma ..... Una domanda più rilevante potrebbe non essere ciò che XML / JSON può fare, ma piuttosto, cosa puoi fare con XML / JSON.

Ci sono diverse cose che puoi fare con XML che non penso tu possa fare con JSON, come tradurre con XLST, cercare con XPath e convalidare con schemi. Tutto molto, molto utile.


5
Ad eccezione del contenuto misto in cui i dati contengono tag. JSON non lo fa molto bene.
S.Lott

11

XSLT offre molte funzionalità che potrebbero non essere possibili con JSON. Quindi, se non sono funzionalmente equivalenti, non potrebbero sostituirsi a vicenda.


3
Detto questo, potresti usare un altro linguaggio per deserializzare, manipolare e serializzare JSON e XSLT non è XML, quindi questo punto è davvero discutibile.
StuperUser,

3
XSLT è XML - vedi lo schema qui
treecoder

Grazie @greengit, ho avuto solo una breve esposizione, ho aggiornato la risposta.
StuperUser

2
@StuperUser: come potrebbe essere "impossibile" con JSON? È solo una trasformazione, forse mancano ancora gli strumenti. O il problema è legato alla mancanza di attributi in JSON?
maaartinus,

1
@StuperUser: XSLT è un linguaggio (sottoinsieme di XML) per il quale alcuni interpreti sono stati scritti in almeno un'altra lingua (probabilmente in C, Java, ...). Lo stesso si potrebbe fare per JSON (definire alcuni JSON-T, scrivere l'intero), no?
maaartinus,

8

Il fatto è che dovremo convivere con entrambi per molto tempo, ed essere un bigotto JSON è "considerato dannoso".


7

JSON è abbastanza nuovo e i sistemi legacy non lo supporteranno. L'aggiornamento dei sistemi legacy è costoso e introduce bug. JSON non sostituirà XML in qualsiasi momento nel prossimo futuro.


2
grazie per la tua risposta. Quello che ho in mente è una revisione tecnica, piuttosto che una strategia di implementazione. Voglio solo sapere, ad esempio, per le nuove versioni di quei sistemi legacy, possiamo eliminare completamente XML e usare JSON? In caso contrario, cosa ci manca in JSON?
Saeed Neamati,

D'altra parte, non ho usato alcun XML, solo JSON, negli ultimi anni. E buon viaggio. Naturalmente XML è più intraprendente. Il che è ottimo per la sicurezza del lavoro, non tanto per l'efficienza.
gnasher729,

6

Direi che cwallenpoole è un punto eccellente. Mentre la maggior parte degli XML può essere tradotta in JSON, se è meglio farlo perché è un punto separato.

JSON si presta alle strutture di dati almeno oltre che a XML e probabilmente meglio, ma XML legge molto più naturalmente di JSON quando contrassegna documenti testuali, in cui i tag vengono utilizzati all'interno di un flusso di testo più ampio anziché semplicemente come un modo per delimitare una gerarchia di campi.

Mentre HTML 5 può avere un proprio parser, che lascia comunque applicazioni come DocBook.


JSON può ovviamente contenere stringhe che possono contenere HTML.
gnasher729,

6

Dipende dal dominio. In termini di servizi web? Assolutamente. È assolutamente vergognoso che i fornitori stiano ancora spingendo SOAP sui loro clienti. REST + JSON fino in fondo.

Ora, quando parli di dati complessi e strutturati con informazioni di stile come Docbook o altre implementazioni? Questo è un dominio appropriato per XML.


4

Perché limitarti a JSON quando YAML è un super set e molto più espressivo e quindi potente di XML o JSON.

Detto questo, se si utilizzano i framework di serializzazione corretti, si dovrebbe essere in grado di serializzare e deserializzare tutti i formati sopra menzionati con un paio di semplici righe di codice.


3

Diventa brutto quando provi a modellare questi due oggetti in JSON:

<customer><name>John Doe</name></customer>
<employee><name>John Doe</name</employee>

Usando JSON come è abituato nel 99% dei casi ci si perde con:

{ name: "John Doe" } 

E ora devi aggiungere alcune meta-strutture e tutta la bellezza di JSON è sparita mentre rimani con i lati negativi.


11
JSON equivalente all'XML fornito è { customer: { name: 'John Doe' }, employee : { name: 'John Doe' } }. Quindi tecnicamente, la tua risposta non è corretta. :)
Saeed Neamati,

Certo, l'unica cosa che manca in JSON sono gli attributi e ci sono inutili per la modellazione di oggetti (a differenza del markup). A volte gli attributi vengono utilizzati come scorciatoia per ciò che può essere espresso usando dati nidificati (ad esempio, nei file di configurazione di Hibernate), il che è utile ma in realtà l'esistenza della scelta lo rende più difficile. I file di configurazione e gli oggetti di modellazione sono due luoghi in cui JSON è chiaramente superiore.
maaartinus,

2
@SaeedNeamati, quindi come modelleresti <customer><name>John Doe</name></customer><customer><name>John Doe</name></customer>in JSON?
svick,

6
{customers: [{name: 'John Doe'}, {name: 'John Doe'}]}?
scrwtp,

2
@Stijn - giusto, e funziona, ma conferma il commento della risposta originale, che "devi aggiungere alcune meta-strutture" per modellare alcune cose che cadono più naturalmente in XML.
Matt R

3

Non so se esiste una tale funzione per JSON, ma in .NET almeno puoi convalidare XML su un determinato schema. Questo è un prezioso vantaggio di XML ai miei occhi.


2
Anche json ha schemi: json-schema.org
lordvlad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.