Sna*_*Tom 6 javascript php json
我的任务是定义两个Web应用程序之间的通信.我决定使用JSON.在JSON中有一个根节点有多常见?
假设我们有一个汽车对象.这是JSON,其中"Car"是根节点:
{"Car": {
"Make":"Mustang",
"YearBuilt":"1999"}}
Run Code Online (Sandbox Code Playgroud)
所以现在让我们说我有一个Tire对象,因为我们正在标准化拥有根节点,所以这个也必须拥有它.
{"Tire": {"Make": "Brirdgestone", "Size":"15"}}
Run Code Online (Sandbox Code Playgroud)
将轮胎对象JSON集成到原始Car对象中可以显示它是多么笨重.
{"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"}}
]}}
Run Code Online (Sandbox Code Playgroud)
所以在PHP中序列化,第一个轮胎的制造将是$object->Car->Tires[0]->Tire->Make.由于根节点,那里有额外的轮胎级别.
如果Tire没有根节点,那么代码可能会更加纤薄.
{"Car": { "Make":"Mustang",
"YearBuilt":"1999",
"Tires": "[{ {"Make": "Bridgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}}]}}
Run Code Online (Sandbox Code Playgroud)
在PHP中,混淆较少,因为冗余较少:第一个轮胎的构造被称为 $object->Car->Tires[0]->Make
没有根节点有什么不好的吗?我喜欢拥有根节点,因为它的行为类似于类名,但是不必要的级别会让我感到很烦恼,并且会使遍历变得更加复杂.
我省略了根节点,轮胎和汽车.
请记住,JSON的主要用途是以紧凑的格式通过网络传输对象.除此之外没有其他真正的用法.您希望使用JSON编码的数据,并通过添加根节点,您创建的空容器对象没有真正的身份和目的.省略根节点时,你会得到
$car->tires[0]->make
Run Code Online (Sandbox Code Playgroud)
在JS你会得到
car.tires[0].make
Run Code Online (Sandbox Code Playgroud)
这更加清晰,更好地代表了对象.请记住,这是您必须使用的.当然,您可以使用某种JSON映射器来映射对象应该如何序列化并导致上述对象,但这需要付出很多额外的努力而且不值得imho.
如果你想在JSON中拥有类名,只需将它作为属性,例如
{ 'klass': 'Car', 'make': 'Mustang', 'year':1999 }
Run Code Online (Sandbox Code Playgroud)