如何显示包含未知字段名称的列表的列表?

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

我是 Flutter 的新手,必须为结构奇怪的 API 制作一个模型类,我似乎无法在文档或在线任何地方找到任何解决方案。

JSON 文件的结构如下

{
    "series_values": {
        "card_1": {
            "card_series": {
                "Playername": "SAMPLE NAME",
                "cardnumber": "999",
             }
        }
        "card_2": {
            "card_series": {
                "Playername": "SAMPLE NAME",
                "cardnumber": "999",
             }
        }
    }
}

主要问题是我不知道series_values中元素的名称将是什么标题,也不知道列表中有多少个(card_1和card_2只是示例名称),但我知道它们将始终是一个包含 card_series 的列表,其中包含玩家名和卡号。我如何设计一个类来从每个 JSON 中获取数据?

我制作了一个模型文件来读取 JSON 文件,但我不知道如何将 card_series 列表放入 series_values 列表中的每个项目中。

class CardSeries {
  final String playername;
  final String cardnumber;

  CardSeries({required this.cardnumber, required this.playername});

  factory CardSeries.fromJson(Map<dynamic, dynamic> json) {
    return CardSeries(
      playername: json['Playername'],
      cardnumber: json['cardnumber'],
    );
  }
}



class CardSV {
  final List<CardSeries> cs;

  CardSV({required this.cs});

  factory CardSV.fromJson(Map<dynamic, dynamic> json) {
    return CardSV(
      cs: List<CardSeries>.from(json['card_series'].map((cs) => CardSeries.fromJson(cs)),
      )
    );
  }
}


class SeriesValues {
  final List<CardSV> cardsSV;

  SeriesValues({required this.cardsSV});

  ???
  }
}

class CardInfo {
  final List<SeriesValues> seriesValues;

  CardInfo({required this.seriesValues});

  factory CardInfo.fromJson(Map<dynamic, dynamic> json) {
    return CardInfo(
      seriesValues: List<SeriesValues>.from(json['series_Values'].map((seriesValues) => SeriesValues.fromJson(seriesValues)),)
    );
  }
}
json flutter list api dart
1个回答
0
投票

要在 Flutter 中处理具有未知字段名称的 JSON 数据,您可以使用 Map 和 List 数据结构的组合以及迭代。以下是如何设计类来解析提供的 JSON 结构:

  final jsonMap = json.decode(jsonString);
  final seriesValues = jsonMap['series_values'];

  seriesValues.forEach((key, value) {
    final cardName = key;
    final cardSeries = value['card_series'];
    final playerName = cardSeries['Playername'];
    final cardNumber = cardSeries['cardnumber'];
    
    print('Card Name: $cardName');
    print('Player Name: $playerName');
    print('Card Number: $cardNumber');
    print('Card Number: $cardNumber');
  });
© www.soinside.com 2019 - 2024. All rights reserved.