I'm tasked with defining communication between two web apps. I've decided to use JSON for this. How common is it to have a root node in the JSON?
Let's say we have a car object. This is the JSON with "Car" being the root node:
{"Car": {
"Make":"Mustang",
"YearBuilt":"1999"}}
So now let's say I have a Tire object and since we are standardizing on having root nodes, this one also has to have it.
{"Tire": {"Make": "Brirdgestone", "Size":"15"}}
Integrating the tire object JSON into the original Car object shows how unwieldy it could be.
{"Car": { "Make":"Mustang",
"YearBuilt":"1999",
"Tires": "[{"Tire": {"Make": "Brirdgestone", "Size":"15"}},
{"Tire": {"Make": "Brirdgestone", "Size":"15"}},
{"Tire": {"Make": "Bridgestone", "Size":"15"}},
{"Tire": {"Make": "Brirdgestone", "Size":"15"}}
]}}
So serialized in PHP, the make of the first Tire would be $object->Car->Tires[0]->Tire->Make
. There's that extra Tire level there because of the root node.
If Tire did not have the root node the code could be a lot slimmer.
{"Car": { "Make":"Mustang",
"YearBuilt":"1999",
"Tires": "[{ {"Make": "Bridgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}}]}}
In PHP, there's less confusion because there's less redundancy: The make of the first tire is called by $object->Car->Tires[0]->Make
Is there anything bad by not having a root node? I like having the root node because it acts likes a class name, but needless levels bug me a lot and will make traversing more complex.