mko
mko

Reputation: 7325

Should JSON Api attributes element contain nested objects?

This is the first time we are using JSON API in our projects and according to specification on their web, this is what a regular JSON API response should look like

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"
      }
    }
  ]
}

We are not sure, should attributes in data be always flat, or attributes could also contain nested objects such as location for example

"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"}
        },

Upvotes: 5

Views: 2224

Answers (2)

edymerchk
edymerchk

Reputation: 1263

Yes, take a look to : 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.

Upvotes: 6

Md. Shamim Shahnewaz
Md. Shamim Shahnewaz

Reputation: 114

After Decoding your JSON, Result is -

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
                        )

                )

        )

)

And here location contains an array, so this will be an nested object.

Upvotes: 0

Related Questions