Javascript 在最新的Ember数据版本中使用RESTSerializer格式化JSON
我正在努力将我的JSON“咀嚼”成正确的格式 为了说明这一点,我做了一个快速的JSfiddle 服务器返回数据的格式与Ember data现在推荐的首选格式有一些不同 以下是原始JSON输出Javascript 在最新的Ember数据版本中使用RESTSerializer格式化JSON,javascript,json,serialization,ember.js,ember-data,Javascript,Json,Serialization,Ember.js,Ember Data,我正在努力将我的JSON“咀嚼”成正确的格式 为了说明这一点,我做了一个快速的JSfiddle 服务器返回数据的格式与Ember data现在推荐的首选格式有一些不同 以下是原始JSON输出 { "video": { "uuid": "8a660002-03c6-4b8e-bd8b-4ce28fa0dacd", "state": "pending", "theme": "basic", "resolution": "nHD
{
"video": {
"uuid": "8a660002-03c6-4b8e-bd8b-4ce28fa0dacd",
"state": "pending",
"theme": "basic",
"resolution": "nHD",
"title": "Test title",
"track": {
"uuid": "376fc3bb-d703-49e7-9d92-bce7f6bf8b56",
"state": "complete",
"source": "upload"
}
}
}
首先,它使用的是一个字符串UUID,而不是使用ID
我似乎已经设法用normalizeHash解决了这个问题,至少对视频来说是这样——但我不确定同样的方法是否也能解决轨迹模型——特别是如果我需要使用嵌入的话
这就是大问题开始出现的地方,如果我从视频模型中注释掉belongsTo关系,那么它工作正常,所以我认为。。。这显然是嵌入式轨迹数据的JSON格式问题
以下是模型定义和序列化
App.Video = DS.Model.extend({
title: DS.attr('string'),
//track: DS.belongsTo('track', { embedded: true })
});
App.VideoSerializer = DS.RESTSerializer.extend({
normalizeHash: {
video: function(hash) {
hash.id = hash.uuid;
delete hash.uuid;
return hash;
}
}
});
对于如何将此响应格式化为余烬数据能够识别的格式,我非常感谢您的建议
还有-有人知道调试这些序列化转换的工具或好方法吗?因为目前来自Ember的错误消息在调试或查看序列化输出方面没有太大帮助
非常感谢你能提供的任何帮助
Chris如果其他人对序列化有同样的困惑,我想我应该包括一个如何解决这个问题的解释 以下是工作jsbin: 要点是: 主键
primaryKey: 'uuid'
track: DS.belongsTo('track', {embedded: true} )
将id转换为正确的命名很有用&需要显式地应用于任何序列化程序(在ApplicationSerializer上全局使用似乎不起作用)
模型关系
primaryKey: 'uuid'
track: DS.belongsTo('track', {embedded: true} )
确保关系的定义包括嵌入&仅在一侧嵌入
提取单个
extractSingle: function(store, type, payload, id, requestType) {
var tracks = [];
var track = payload.video.track;
var video = payload.video;
tracks.push(track);
video.track = payload.video.track.uuid;
payload = { video: video, track: tracks };
return this._super(store, type, payload, id, requestType);
}
多元化对于余烬数据理解关系非常重要,即使模型关系是一种归属关系
您可以在所需的(工作)JSON中清楚地看到这一点
视频中的轨迹值不是包装在数组中,而根轨迹值是数组
出于这个原因,我发现它非常有用,首先定义所需的JSON并测试它是否工作,然后尝试将真正的JSON转换为该格式
我认为有一个工具可以帮助完成这一过程(可视化seraliziation的实时JSON输出),这可能是对Ember数据的一个很好的补充&我将研究如何创建这些数据。如果其他人对序列化有同样的困惑,我想我应该包括一个如何解决这个问题的解释 以下是工作jsbin: 要点是: 主键
primaryKey: 'uuid'
track: DS.belongsTo('track', {embedded: true} )
将id转换为正确的命名很有用&需要显式地应用于任何序列化程序(在ApplicationSerializer上全局使用似乎不起作用)
模型关系
primaryKey: 'uuid'
track: DS.belongsTo('track', {embedded: true} )
确保关系的定义包括嵌入&仅在一侧嵌入
提取单个
extractSingle: function(store, type, payload, id, requestType) {
var tracks = [];
var track = payload.video.track;
var video = payload.video;
tracks.push(track);
video.track = payload.video.track.uuid;
payload = { video: video, track: tracks };
return this._super(store, type, payload, id, requestType);
}
多元化对于余烬数据理解关系非常重要,即使模型关系是一种归属关系
您可以在所需的(工作)JSON中清楚地看到这一点
视频中的轨迹值不是包装在数组中,而根轨迹值是数组
出于这个原因,我发现它非常有用,首先定义所需的JSON并测试它是否工作,然后尝试将真正的JSON转换为该格式
我认为有一个工具可以帮助完成这一过程(可视化seraliziation的实时JSON输出),这可能是对Ember数据的一个很好的补充&我将研究如何创建这些数据