You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON转Dart对象失败:无法打印属性值的问题排查

排查JSON转Dart实体id属性无法读取的问题

1. 核对JSON键名与Dart类属性名的一致性

Dart对大小写敏感,确保JSON中的id键名和Dart类里的属性名完全匹配,比如JSON里是"id": 1001,Dart类里就不能写成int Id;或者int iid;,必须保持拼写、大小写完全一致。

2. 检查fromJson方法的赋值逻辑

确认MROParent.fromJson方法里正确读取了JSON中的id值并赋值给类属性,避免漏写或键名错误:

// 错误示例:遗漏id赋值
MROParent.fromJson(Map<String, dynamic> json) {
  children = List<MROChild>.from(json['children'].map((x) => MROChild.fromJson(x)));
}

// 正确示例:
MROParent.fromJson(Map<String, dynamic> json) {
  id = json['id']; // 确保此处键名和JSON一致
  children = List<MROChild>.from(json['children'].map((x) => MROChild.fromJson(x)));
}

3. 确认id属性的访问权限

如果id是私有属性(以_开头,比如int _id;),直接打印parent.id会无法访问,需要改为公共属性或添加getter方法:

// 方案1:改为公共属性
class MROParent {
  int id;

  MROParent.fromJson(Map<String, dynamic> json) {
    id = json['id'];
  }
}

// 方案2:私有属性加getter
class MROParent {
  int _id;
  int get id => _id;

  MROParent.fromJson(Map<String, dynamic> json) {
    _id = json['id'];
  }
}

4. 验证JSON中id字段的有效性

打印原始JSON时,确认id字段确实存在且有值,避免出现字段缺失、值为null,或者id嵌套在更深层级(比如json['data']['id']而不是直接json['id'])的情况。

5. 确认转换后的对象及toString方法

转换后先打印整个MROParent对象,确认对象本身不为null,同时如果重写了toString方法,要确保包含id属性:

var parent = MROParent.fromJson(jsonData);
print(parent); // 查看对象输出是否包含id
print(parent.id);

// 重写toString示例
@override
String toString() {
  return 'MROParent{id: $id, children: $children}';
}

内容的提问来源于stack exchange,提问作者Kim Lo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:15:13