可以从Json Handle Embedded Fields获得Angular2 Factory

时间:2016-08-18 20:43:05

标签: ruby-on-rails json dart angular-dart

我正在尝试将外键数据从JSON提要中展平为一个类。我将该字段添加到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 Seriializer。这里是相关部分:

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从标签表中检索名称值。这是结果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"
},

1 个答案:

答案 0 :(得分:1)

我不完全确定我理解这个问题,但我想这就是您正在寻找的问题

record['label']['label_name']