来自Json的Angular2 Factory可以处理嵌入式字段吗
Can Angular2 Factory fromJson Handle Embedded Fields
我正在尝试将 JSON 提要中的外键数据扁平化为 class。我将该字段添加到 fromJson 工厂方法,它不会在浏览器控制台 (Dartium) 上出错。当我显示它时,该字段是空白的,所以看起来它没有通过,这并不奇怪。我在网上找不到该方法的任何文档。这是我的 JSON 数据:
{
"id": 386,
"artist_id": 57,
"label_id": 5,
"style_id": 61,
"title": "A Flower is a Lovesome Thing",
"catalog": "OJCCD-235",
"alternate_catalog": null,
"recording_date": "1957-04-01",
"notes": null,
"penguin": "**(*)",
"category": "jazz",
"label": {
"label_name": "Fantasy"
}
},
这是方法:
factory Record.fromJson(Map<String, dynamic> record) =>
new Record(_toInt(record['id']),
record['title'],
record['catalog'],
record['artist_id'],
record['label_id'],
record['style_id'],
record['alternate_catalog'],
DateTime.parse(record['recording_date']),
record['notes'],
record['penguin'],
record['category'],
record['label_name']
);
这是调用:
HttpRequest response = await HttpRequest.request(
url, requestHeaders: headers);
List data = JSON.decode(response.responseText);
final records = data
.map((value) => new Record.fromJson(value))
.toList();
return records;
我也在 from Json 方法中尝试了 label:label_name。是否可以继续使用fromJson实例化对象?有没有任何地方可以解释Json 的文档?我找到了一些,但它几乎什么也没说。我也在考虑在 Rails 序列化程序中将其展平,或者作为最后的手段在数据库中创建视图。您可能会注意到,我还有两个外键尚未处理。
B计划
Günter 的回答解决了客户端的问题。如果任何阅读者更喜欢,还有一个 Rails 解决方案。它需要 Active Model Serializer。相关部分在这里:
class RecordSerializer < ActiveModel::Serializer
attributes :id, :artist_id, :label_id, :style_id, :title, :catalog, :alternate_catalog,
:recording_date, :notes, :penguin, :category, :label_name
def label_name
object.label.name
end
end
指令 object.label.name 从标签 table 中检索名称值。这是结果 JSON:
{
"id": 386,
"artist_id": 57,
"label_id": 5,
"style_id": 61,
"title": "A Flower is a Lovesome Thing",
"catalog": "OJCCD-235",
"alternate_catalog": null,
"recording_date": "1957-04-01",
"notes": null,
"penguin": "**(*)",
"category": "jazz",
"label_name": "Fantasy"
},
不完全确定我是否理解问题,但我想这就是您要查找的内容
record['label']['label_name']
我正在尝试将 JSON 提要中的外键数据扁平化为 class。我将该字段添加到 fromJson 工厂方法,它不会在浏览器控制台 (Dartium) 上出错。当我显示它时,该字段是空白的,所以看起来它没有通过,这并不奇怪。我在网上找不到该方法的任何文档。这是我的 JSON 数据:
{
"id": 386,
"artist_id": 57,
"label_id": 5,
"style_id": 61,
"title": "A Flower is a Lovesome Thing",
"catalog": "OJCCD-235",
"alternate_catalog": null,
"recording_date": "1957-04-01",
"notes": null,
"penguin": "**(*)",
"category": "jazz",
"label": {
"label_name": "Fantasy"
}
},
这是方法:
factory Record.fromJson(Map<String, dynamic> record) =>
new Record(_toInt(record['id']),
record['title'],
record['catalog'],
record['artist_id'],
record['label_id'],
record['style_id'],
record['alternate_catalog'],
DateTime.parse(record['recording_date']),
record['notes'],
record['penguin'],
record['category'],
record['label_name']
);
这是调用:
HttpRequest response = await HttpRequest.request(
url, requestHeaders: headers);
List data = JSON.decode(response.responseText);
final records = data
.map((value) => new Record.fromJson(value))
.toList();
return records;
我也在 from Json 方法中尝试了 label:label_name。是否可以继续使用fromJson实例化对象?有没有任何地方可以解释Json 的文档?我找到了一些,但它几乎什么也没说。我也在考虑在 Rails 序列化程序中将其展平,或者作为最后的手段在数据库中创建视图。您可能会注意到,我还有两个外键尚未处理。
B计划
Günter 的回答解决了客户端的问题。如果任何阅读者更喜欢,还有一个 Rails 解决方案。它需要 Active Model Serializer。相关部分在这里:
class RecordSerializer < ActiveModel::Serializer
attributes :id, :artist_id, :label_id, :style_id, :title, :catalog, :alternate_catalog,
:recording_date, :notes, :penguin, :category, :label_name
def label_name
object.label.name
end
end
指令 object.label.name 从标签 table 中检索名称值。这是结果 JSON:
{
"id": 386,
"artist_id": 57,
"label_id": 5,
"style_id": 61,
"title": "A Flower is a Lovesome Thing",
"catalog": "OJCCD-235",
"alternate_catalog": null,
"recording_date": "1957-04-01",
"notes": null,
"penguin": "**(*)",
"category": "jazz",
"label_name": "Fantasy"
},
不完全确定我是否理解问题,但我想这就是您要查找的内容
record['label']['label_name']