JSON Api attributes 元素是否应该包含嵌套对象?

Should JSON Api attributes element contain nested objects?

这是我们第一次在我们的项目中使用 JSON API,根据他们网站上的规范,这是常规的 JSON API 响应应该看起来像

HTTP/1.1 200 OK
Content-Type: application/vnd.api+json

{
  "data": [{
    "type": "articles",
    "id": "1",
    "attributes": {
      "title": "JSON API paints my bikeshed!",
      "body": "The shortest article. Ever.",
      "created": "2015-05-22T14:56:29.000Z",
      "updated": "2015-05-22T14:56:28.000Z"
    },
    "relationships": {
      "author": {
        "data": {"id": "42", "type": "people"}
      }
    }
  }],
  "included": [
    {
      "type": "people",
      "id": "42",
      "attributes": {
        "name": "John",
        "age": 80,
        "gender": "male"
      }
    }
  ]
}

我们不确定,数据中的属性是否应该始终是扁平的,或者属性也可以包含嵌套对象,例如位置

"data": [{
        "type": "articles",
        "id": "1",
        "attributes": {
          "title": "JSON API paints my bikeshed!",
          "body": "The shortest article. Ever.",
          "created": "2015-05-22T14:56:29.000Z",
          "updated": "2015-05-22T14:56:28.000Z",
          "location": 
          { 
             "lat": "0.00",
             "long": "0.00"}
        },

解码你的 JSON 后,结果是 -

Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [type] => articles
                    [id] => 1
                    [attributes] => Array
                        (
                            [title] => JSON API paints my bikeshed!
                            [body] => The shortest article. Ever.
                            [created] => 2015-05-22T14:56:29.000Z
                            [updated] => 2015-05-22T14:56:28.000Z
                            [location] => Array
                                (
                                    [lat] => 0.00
                                    [long] => 0.00
                                )

                        )

                    [relationships] => Array
                        (
                            [author] => Array
                                (
                                    [data] => Array
                                        (
                                            [id] => 42
                                            [type] => people
                                        )

                                )

                        )

                )

        )

    [included] => Array
        (
            [0] => Array
                (
                    [type] => people
                    [id] => 42
                    [attributes] => Array
                        (
                            [name] => John
                            [age] => 80
                            [gender] => male
                        )

                )

        )

)

这里location包含一个数组,所以这将是一个嵌套对象。

是的,请查看:http://jsonapi.org/format/#document-resource-object-attributes

Complex data structures involving JSON objects and arrays are allowed as attribute values. However, any object that constitutes or is contained in an attribute MUST NOT contain a relationships or links member, as those members are reserved by this specification for future use.