在JSON中建模标识符(唯一ID)的最佳方法

时间:2015-09-22 12:30:41

标签: json

在建模JSON数据时,我们通常会处理唯一对象标识符。我们可以将它们建模为(i) key (或 property )或(ii) value 。哪个是最好的解决方案,如果有的话,或者什么是利弊?这里有一个例子。

标识符为关键:

[
  {
    "1": {
      "tel": "tel1",
      "e-mail": "mail2"
    }
  },
  {
    "2": {
      "tel": "tel2",
      "e-mail": "mail2"
    }
  }
]

标识符为id键的值:

[
  {
    "id": 1,
    "tel": "tel1",
    "e-mail": "mail2"
  },
  {
    "id": 1,
    "tel": "tel2",
    "e-mail": "mail2"
  }
]

1 个答案:

答案 0 :(得分:3)

第2号的好处

[
  {
    "id": 1,
    "tel": "tel1",
    "e-mail": "mail2"
  },
  {
    "id": 1,
    "tel": "tel2",
    "e-mail": "mail2"
  }
]

可能是每个模型及其信息都表示为一个JSON对象。如果模型的ID是模型的属性,则这是合乎逻辑的。在这种情况下,将所有属性保存在一个对象中是很好的,而不需要嵌套对象来描述与模型有关的同一“级别”的属性。

但是,出于同样的原因,如果ID不是模型的属性,而是单独的值,那么你应该使用选项1,因为它说:这里是第一个对象,这些是它的属性。这是第二个对象,这些是它的属性等。

2的另一个潜在好处是可以更容易在客户端解析(这取决于你如何解析它,你使用哪个库等等)。如果手动解析,您可以简单地遍历JSON数组中的所有对象,并且该循环中的每个项代表一个具有其所有属性的模型,而不需要深入挖掘,就像您需要使用1一样。

此外,正如Pietro正确建议的那样,通过移除每个对象周围的{},可以使选项1变得更漂亮。

{
    "1": {
        "tel": "tel1",
        "e-mail": "mail2"
    },
    "2": {
        "tel": "tel2",
        "e-mail": "mail2"
    }
}

然而,您的整个JSON将是一个对象。这在语义上是错误的。你不应该这样做。

考虑到这一点,选项2也更漂亮。不那么迷惑{}

Pietro的另一个正确评论:

  

JSON是一种数据交换格式,并不是非常接近建模工具。您应首先查看您的数据模型,(类,数据库或其他),然后在您的JSON(de)序列化程序中:您应该从那里选择JSON表示