php - JSON 中的根节点

标签 php javascript json

我的任务是定义两个网络应用程序之间的通信。我决定为此使用 JSON。在 JSON 中有一个根节点有多常见?

假设我们有一个汽车对象。这是以“Car”为根节点的 JSON:

{"Car": { 
  "Make":"Mustang", 
  "YearBuilt":"1999"}}

现在假设我有一个 Tire 对象,并且由于我们正在标准化拥有根节点,所以这个对象也必须拥有它。

{"Tire": {"Make": "Brirdgestone", "Size":"15"}}

将轮胎对象 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"}}
]}}

如此在 PHP 中序列化,第一个轮胎的品牌将是 $object->Car->Tires[0]->Tire->Make。由于根节点,那里有额外的 Tire 级别。

如果 Tire 没有根节点,代码可能会精简很多。

{"Car": { "Make":"Mustang", 
"YearBuilt":"1999",
"Tires": "[{ {"Make": "Bridgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}}]}}

在 PHP 中,由于冗余较少,因此混淆较少:第一个轮胎的品牌由 $object->Car->Tires[0]->Make 调用

没有根节点有什么坏处吗?我喜欢有根节点,因为它就像一个类名,但不必要的级别让我很烦,并且会使遍历更加复杂。

最佳答案

我会省略两个根节点,TireCar

请记住,JSON 的主要用途是以紧凑格式通过网络传输对象。除此之外没有真正的其他用法。您想要使用 JSON 编码的数据,并且通过添加根节点,您正在创建没有真实身份和用途的空容器对象。省略根节点时,您会得到

$car->tires[0]->make

在 JS 中你会得到

car.tires[0].make

这更清晰并且更好地代表了对象。请记住,这是您必须处理的内容。当然,您可以使用某种 JSON 映射器来映射对象应如何序列化并生成上述对象,但这是很多额外的工作,恕我直言,不值得这样做。

如果你想在 JSON 中包含类名,只需将其设为属性即可,例如

{ 'klass': 'Car', 'make': 'Mustang', 'year':1999 }

关于php - JSON 中的根节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2107691/

相关文章:

php - iOS:从 PHP 获取响应

php - 无法在 PHP 中设置 utf8 字符集

javascript - 在页面加载时执行函数,ANGULAR 2

php - 无法从 PHP 文件中解码 JSON

java - 如何编写 Google Cloud Messaging 的 POST 请求?

php - 在 PHP 中预测基于时间的数据集的 future 值

php - 将 .mov 转换为 .mp4 php 的问题

javascript - 为什么我没有成功地在第二个代码部分中获得嵌入的 "if"来完成其工作?

javascript - 从asp.net图表控件打开一个新窗口

c# - 如何在 C# 中取消扁平化的 json