Comments (7)
Unfortunately an attr
field of type map[string]foo
will just result in errors (like the one you are seeing). Currently this library does not provide support to Marshal or Unmarshal the nested attributes as provided in your example JSON payload; see #49 and #21 for similar discussion. With that being said we would appreciate any PR adding such support!
Library support aside, I think in your specific case you may want to consider each File
as a relation to the Player
; such that a Player
would have many File
s. Currently you are using the Player attributes
to describe many files. Per the spec the attributes object
should only model information about the resource object (in this case players
) - it seems like path
, isDir
and time
are not describing players
but rather files
. I'd suggest something akin to:
type Player struct {
ID int `jsonapi:"primary,players"`
Path string `jsonapi:"attr,path"`
Files *File `jsonapi:"relation,files"`
}
type File struct {
Name string `jsonapi:"primary,files"`
Path string `jsonapi:"attr,path"`
isDir bool `jsonapi:"attr,isDir"`
time time.Time `jsonapi:"attr,time"`
}
from jsonapi.
Thanks for the response, I do agree in principle that the schema is.. confused however this is a bit of a legacy api and changes can't be made easily.
I will investigate adding nested attribute support to the library.
from jsonapi.
@aren55555 @nodefortytwo does the jsonapi spec permit such attribute configuration?
from jsonapi.
@shwoodard yes the JSON API spec does permit this configuration; take a look at http://jsonapi.org/format/#document-resource-object-attributes:
Attributes
The value of the attributes key MUST be an object (an “attributes object”). Members of the attributes object (“attributes”) represent information about the resource object in which it’s defined.
Attributes may contain any valid JSON value.
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.
Although has-one foreign keys (e.g. author_id) are often stored internally alongside other information to be represented in a resource object, these keys SHOULD NOT appear as attributes.
from jsonapi.
@nodefortytwo in looking at this again I also noticed all the keys in your sample JSON payload are not strings; ie data:
vs "data":
- not sure if this was an off hand example or an actual payload; but I thought I would point this out.
That payload will cause an error outside of the JSON API library; it will fail the vanilla go JSON unmarshal.
from jsonapi.
I should also mention that I have been working on a JSON API payload validator... its a WIP so it's not yet perfect, but it will catch anything really obvious/easy to implement: http://corroborate.arenpatel.com/
{
"data": {
"type": "players",
"id": "71776400",
"attributes": {
"path": "/no/dnb/71776400",
"files": {
"meta.json.js": {
"path": "/vlah/",
"isDir": false,
"time": "2016-10-04T00:59:12+00:00"
},
"tine-sunniva": {
"id": "6a342e32-3aad-41f2-86bd-721170d02718",
"path": "/blah",
"isDir": true,
"time": "2016-10-04T00:59:12+00:00",
"atomic": true
}
}
},
"links": {
"self": "https://blah/api/v2/players/71776400"
}
}
}
That payload shows results in no errors/warnings.
from jsonapi.
Sorry just got the notification about this.
the data vs "data" thing was caused by copying from JSON View :)
JSON validator is cool, I generally use pro.jsonlint.com
from jsonapi.
Related Issues (20)
- Type validation on post is skipped
- Support for partial inclusion of relationships
- Asymmetrical behavior with json.RawMessage-type fields
- Community adoption of project HOT 4
- Unmarshall array of object in attribute HOT 1
- map inside struct unmarshalling HOT 2
- Export clearIncluded HOT 1
- got the wrong id when unmarshel a stract with an Int64 id HOT 1
- Is this project active? HOT 4
- Polymorphic relationships HOT 1
- Skipping an element in an array due to unmatched type
- Does example in README have a typo? HOT 1
- int64 id value changed while decoding HOT 12
- Marshal nested object does not work
- data is not a jsonapi representation of *type HOT 2
- Support for Unmarshalling Slices of floats/ints/bools
- Empty relation atrributes HOT 1
- adding meta at time of encoding
- jsonapi.MarshalPayload sets response status to 200, but I want 201 (created) HOT 1
- The wiki shows some weird 'hack' text
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jsonapi.