Как разобрать вложенные json во флаттере - PullRequest
0 голосов
/ 26 мая 2020

У меня есть вложенный json, где я хочу проанализировать данные рабочего листа и отобразить список данных рабочего листа в отдельных карточках. Я пробовал использовать онлайн инструмент синтаксический анализ, но когда я распечатываю данные, он выдает ошибку под названием «тип« Список »не является подтипом типа« Карта »

# Обновление Ниже находится файл home.dart, в котором я получаю сообщение об ошибке Home.dart

class WorkSheet extends StatefulWidget {
  const WorkSheet({Key key}) : super(key: key);

  @override
  _WorkSheetState createState() => new _WorkSheetState();
}

class _WorkSheetState extends State<WorkSheet> {

  Future<String> loadSheetDataFromAssets() async {
    return await DefaultAssetBundle.of(context)
        .loadString('assets/example.json');
  }

  Future loadSheetData() async {
    String jsonString = await loadSheetDataFromAssets();
    final jsonResponse = json.decode(jsonString);
    SheetData sheetData = new SheetData.fromJson(jsonResponse);
    print('PName : ${sheetData.projectName}');
    print('Worksheet : ${sheetData.worksheetData}');
    print(sheetData);
  }

  @override
  void initState() {
    super.initState();
    loadSheetData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Work sheet data'),
      ),
      body: FutureBuilder(
        future: loadSheetData(),
        builder: (context, snapshot){
          if(snapshot.data == null){
            return Center(child: Text(snapshot.error));
          }else{
            return Card(child: Text(snapshot.data.toString()));
          }
        }
        )
    );
  }
}

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Убедитесь, что классы ваших классов, которые вы хотите преобразовать из Json, помечены @JsonSerializable (). Пожалуйста, следуйте документации по флаттеру для этого https://flutter.dev/docs/development/data-and-backend/json

Это с автоматическим преобразованием всех ваших вложенных классов, объявленных с помощью @JsonSerializable (), но если вам нужно преобразовать список из Json, вам нужно написать дополнительный код, как показано ниже

Map jsonObject = json.decode(jsonString);
          Iterable list = json.decode(jsonObject['worksheetData']);
          List<WorksheetData> datasheet = list.map((f) => WorksheetData.fromJson(f)).toList();
0 голосов
/ 26 мая 2020

Вы можете использовать некоторые внешние инструменты для создания ваших моделей, например quicktype Или любой из подходов, описанных в официальной документации do c

...