I'll step up to the plate to give a more technical answer.
JSON is an edge labelled tree, XML is node labelled tree. Let's see what that means, but first, let's talk about what nodes, edges, trees, and labels. You may already know, but I don't want to make no assumptions.
First, a tree: A tree is a datastructure with nodes, which reference other nodes, and each node is only referred to by one other node. Now, XML is obviously a tree, with each tag being a node:
<dog>
/| |\
/ | | \
/ | | \
<paw> | | <paw>
/ \
/ \
/ \
<paw> <paw>
However JSON is also a tree: however, instead of tags, we have arrays and objects:
Well, actually, I'm not going to draw that. I'm typing on a phone, and it was hard enough making that last one. So, you know, just imagine it. And if you imagine hard enough, you just might notice that this graph is edge labelled, rather than node labelled.
A node, as you may recall, is just a thing on the tree, like a tag, or an object or an array. Queue the music!
TO THE TUNE OF "NOUNS" FROM SCHOOLHOUSE ROCK:
Oh any list through which you can go (like a array, a linked list, or an arraylist),
And any structure that you can show (like a hashmap, or a struct),
If they have pointers you can follow (from an object in a tree),
You know they're nodes, you know they're nodes
Aaaanyway, an edge is the link between two nodes, and labels are just names.
JSON labels edges: "I want the first value in the array you got at key "foo" from the root object."
XML labels nodes: "I want the paragraph tag with the id of 'foo' inside the body tag inside the html tag."
You see, with the JSON, the nodes themselves didn't have labels, just the links between them: With XML, it was the opposite: There was no name for the links, instead there were names for the objects.
GGP reminds us that most programming languages do it the same way JSON does (when was the last time referred to the Foo object in the Bar object in the head Baz object when coding?), and so JSON maps better to the kind of datastructures we use most of the time.