Transform JSON to an appropriate format for RESTAdapter EmberJS
ember-data, ember.js, json
Solution
I ran into this issue earlier today. A nice clean way to fix it is to define a normalizePayload method for your ApplicationSerializer. It's made to be overwritten, so you aren't affecting anything else.
E.g.
App.ApplicationSerializer = DS.RESTSerializer.extend({
normalizePayload: function(type, payload) {
return { category: payload };
}
}
If you want to do this on only some of the payloads processed then you just add a conditional inside it.
App.ApplicationSerializer = DS.RESTSerializer.extend({
normalizePayload: function(type, payload) {
if (type.toString() === 'App.Category') {
return { category: payload };
}
}
}
For more info on the normalizePayload method see http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_normalizePayload
Problem
I receive a JSON from our API that has the following format ``` [ { "id": 45, "name": "Pasta", "_order": 0, "is_hidden": null, "is_list": false }, { "id": 46, "name": "Salads", "_order": 1, "is_hidden": null, "is_list": false }, { "id": 47, "name": "Dessert", "_order": 2, "is_hidden": null, "is_list": false } ]; ``` I see that it has invalid format for standard RESTAdapter and I need to put the name of the model first. In my example it should probably be like: ``` { "category": [ { "id": 45, "name": "Pasta", "_order": 0, "is_hidden": null, "is_list": false }, { "id": 46, "name": "Salads", "_order": 1, "is_hidden": null, "is_list": false }, { "id": 47, "name": "Dessert", "_order": 2, "is_hidden": null, "is_list": false } ] } ``` So how to make it look this way in my adapter? It seems like I should use `DS.RESTSerializer`, but I can't figure out which method I should override...