使用嵌套数组列表将String转换为Json

问题描述 投票:0回答:1

我想将一个字符串转换为类对象。示例字符串是这样的:

[{
    "MESSAGE": "Successfully!",
    "ORIGINAL_ERROR": "",
    "ERROR_STATUS": false,
    "RECORDS": true,
    "Data": [{
        "Id": "1",
        "Name": "Third AC"
    }, {
        "Id": "2",
        "Name": "Second AC"
    }, {
        "Id": "3",
        "Name": "First AC"
    }, {
        "Id": "4",
        "Name": "AC Chair Car"
    }, {
        "Id": "5",
        "Name": "First Class"
    }, {
        "Id": "6",
        "Name": "Sleeper Class"
    }, {
        "Id": "7",
        "Name": "Second Class Unreserved"
    }, {
        "Id": "8",
        "Name": "3AC Economy "
    }, {
        "Id": "9",
        "Name": "Second Seating"
    }, {
        "Id": "10",
        "Name": "Executive Class"
    }]
}]

我想将字符串转换为类对象。班级是

class TrainClassData {
  String MESSAGE;
  String ORIGINAL_ERROR;
  String ERROR_STATUS;
  String RECORDS;
  List<TrainClass> Data;

  TrainClassData({
    this.MESSAGE,
    this.ORIGINAL_ERROR,
    this.ERROR_STATUS,
    this.RECORDS,
    this.Data,
  });

  factory TrainClassData.fromJson(Map<String, dynamic> json) {
    return TrainClassData(
      MESSAGE: json['Id'] as String,
      ORIGINAL_ERROR: json['Name'] as String,
      ERROR_STATUS: json['Name'] as String,
      RECORDS: json['Name'] as String,
      Data: json['Data'].map<TrainClass>((json) => TrainClass.fromJson(json)).toList()
    );
  }
}

class TrainClass {
  String Id;
  String Name;

  TrainClass({
    this.Id,
    this.Name,
  });

  factory TrainClass.fromJson(Map<String, dynamic> json) {
    return TrainClass(
        Id: json['Id'] as String, Name: json['Name'] as String);
  }
}

我正在使用服务,但是当我尝试使用这个类来获取数据时,它给了我错误。我的服务电话是这样的。

static Future<List<TrainClassData>> GetTrainClass() async {
    String url = 'http://ttreturn.itfuturz.com/AppService.asmx/TrainClassMaster?type=trainclass';
    print("train class URL: " + url);
    final response = await http.get(url);
    try {
      if (response.statusCode == 200) {
        List<TrainClassData> list = [];
        if (response.body != "" && response.body.toString() != "[]") {
          final parsed = json.decode(response.body).cast<Map<String, dynamic>>();
          var trainClassData = parsed.map<TrainClassData>((json) => TrainClassData.fromJson(json));
          if(trainClassData.ERROR_STATUS == false) {
            list = trainClassData.Data;
          }
          else {
            list = [];
          }
        }
        return list;
      } else {
        throw Exception(MESSAGES.INTERNET_ERROR);
      }
    } catch (e) {
      print("Kapil Erorr : " + e.toString());
      throw Exception(MESSAGES.INTERNET_ERROR);
    }
  }

我收到了错误。

NoSuchMethodError:类'MappedListIterable,TrainClassData>'没有实例getter'ERROR_STATUS'。

请帮我。提前致谢。

dart flutter
1个回答
1
投票

有一些个人错误会导致问题。

1)Dart转换包负责转换数据。所以你应该为属性使用正确的类型。 (e.x. ERROR_STATUS应该是bool,而不是字符串)。

2)响应是一个数组。你应该检查你使用的类型和类。更正后的例子在这里:

class TrainClassData {
  String MESSAGE;
  String ORIGINAL_ERROR;
  bool ERROR_STATUS;

  bool RECORDS;
  List<TrainClass> Data;

  TrainClassData({
    this.MESSAGE,
    this.ORIGINAL_ERROR,
    this.ERROR_STATUS,
    this.RECORDS,
    this.Data,
  });

  factory TrainClassData.fromJson(Map<String, dynamic> json) {
    return TrainClassData(
        MESSAGE: json['MESSAGE'] as String,
        ORIGINAL_ERROR: json['ORIGINAL_ERROR'] as String,
        ERROR_STATUS: json['ERROR_STATUS'] as bool,
        RECORDS: json['RECORDS'] as bool,
        Data: json['Data']
            .map<TrainClass>((json) => TrainClass.fromJson(json))
            .toList());
  }
}

class TrainClass {
  String Id;
  String Name;

  TrainClass({
    this.Id,
    this.Name,
  });

  factory TrainClass.fromJson(Map<String, dynamic> json) {
    return TrainClass(Id: json['Id'] as String, Name: json['Name'] as String);
  }
}

并为服务:

List<TrainClass> list = [];
    final parsed = json.decode(response.body).cast<Map<String, dynamic>>();
    var trainClassData = parsed
        .map<TrainClassData>((json) => TrainClassData.fromJson(json))
        .toList();
    if (trainClassData[0].ERROR_STATUS == false) {
      list = trainClassData[0].Data;
    } else {
      list = [];
    }
© www.soinside.com 2019 - 2024. All rights reserved.