一尘不染

将JSON转换为RESTAdapter EmberJS的适当格式

json

我从API收到了以下格式的JSON

[
  {
    "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
  }
];

我看到它的格式对于标准RESTAdapter无效,我需要将模型名称放在第一位。在我的示例中,它可能应该类似于:

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

那么如何使它在我的适配器中看起来像这样?似乎我应该使用 DS.RESTSerializer,但是我不知道应该重写哪种方法…


阅读 306

收藏
2020-07-27

共1个答案

一尘不染

我今天早些时候遇到了这个问题。解决该问题的一种好方法是为ApplicationSerializer定义normalizePayload方法。它被覆盖了,因此您不会影响其他任何东西。

例如

App.ApplicationSerializer = DS.RESTSerializer.extend({
    normalizePayload: function(type, payload) {
        return { category: payload };
    }
}

如果您只想对某些已处理的有效负载执行此操作,则只需在其中添加条件。

App.ApplicationSerializer = DS.RESTSerializer.extend({
    normalizePayload: function(type, payload) {
        if (type.toString() === 'App.Category') {
            return { category: payload };
        }
    }
}

有关normalizePayload方法的更多信息,请参见http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_normalizePayload

2020-07-27