I disagree with Simons problems with schemas, at least i think there are simple ways to avoid some of the problems: in many recent projects i use simple highly generic dtds for vocabulary, id and parent constraints plus schematron for others: but these dont trap me because at any time i can plonk in processing instructions. It does not hold water to say that XML has problem X if you simultaneously reject utilizing Xml's tool for overcoming problem X!
JSON might get too heavyweight too if you tried to add a layer on JSON to indicate the status of each data item -- which is what XML is all about: is this part of the main text flow?, is this info about that text?, is this metadata/attribute?, is this text for under_the_hood messages to humans?, is this text part of some hack? That status information is useful for some applications (industrial publishing) but not as compelling as an organizing principle for ephemeral data exchange,IMHO.
Every technology has tradeoffs and these change over time. JSON embodies some good software engineering qualities (reducing overworking) but not others (for archiving having no comment mechanism is surely a complication). XML has no tag omission which restricts what can workably produce it.