【问题标题】:Handling nested JSON in Flutter在 Flutter 中处理嵌套的 JSON
【发布时间】:2020-01-27 06:34:31
【问题描述】:

我有一个 API 可以将讲座和测验作为 JSON 数组返回 我设法查看和处理讲座,但测验进入无限循环,我找不到问题。 有关如何查看它的任何帮助? JSON 响应如下所示

{
    "quizzes": [
        {
            "quiz": {
                "quizName": "ch3-",
                "quizDate": "2019-12-06T01:23:35.748Z",
                "quizNo": 5,
                "chName": "ch3-",
            },
            "mark": 9
        },
        {
            "quiz": {             
                "quizName": "ch5-",
                "quizDate": "2020-01-07T11:57:15.862Z",
                "quizNo": 5,
                "chName": "ch5-",
            },
            "mark": 13.5
        },
    ],
}

这是我的代码(我创建了一个Quiz 类并在Quizes 类中调用它) ...

{class Quizes {
   Quiz quiz;
  final int mark;

  Quizes({this.quiz,this.mark});

  factory Quizes.fromJson(Map<String, dynamic> parsedJson) {
    return Quizes(
      quiz: parsedJson['quiz'] as Quiz ,
      mark:  parsedJson['mark'] as int ,
    );}
      @override
String toString(){
  return '{ ${this.quiz},${this.mark} }';
}
    }

class Quiz {
  final int quizNo;
  final String quizName;
  final String quizDate;
  Quiz({this.quizNo,this.quizName,this.quizDate });

  factory Quiz.fromJson(Map<String, dynamic> parsedJson) {
    print(Quiz);
    return Quiz(
      quizNo:  parsedJson['quizNo'] as int ,
      quizName: parsedJson['quizName'] as String,
      quizDate: parsedJson['quizDate'] as String,
    );}

//   @override
// String toString(){
//   return '{ ${this.quizNo},${this.quizName},${this.quizDate} }';
// }

这里是 API 响应的主类

import 'package:flutter/foundation.dart';
import 'package:flutter_http/quiz_model.dart';

class Post {
  final List<Quizes> quizzes;
Post({
    this.quizzes,

  });

  factory Post.fromJson(Map<String, dynamic> parsedJson) {


  var qlist = parsedJson['quizzes'] as List;
  print(qlist.runtimeType);
  List<Quizes> qdataList = qlist.map((i) => Quizes.fromJson(i)).toList();

    return Post(

      quizzes:qdataList,

    );
  }
}

我正在像这样在ListTile 中查看它

   ListTile(
            title: Text("Quizzes"),
            subtitle: Text("${posts.quizzes}"),
           ),

【问题讨论】:

    标签: arrays json list parsing flutter


    【解决方案1】:
    Map jsonData = {
        "quizzes": [
            {
                "quiz": {
                    "quizName": "ch3-",
                    "quizDate": "2019-12-06T01:23:35.748Z",
                    "quizNo": 5,
                    "chName": "ch3-",
                },
                "mark": 9
            },
            {
                "quiz": {             
                    "quizName": "ch5-",
                    "quizDate": "2020-01-07T11:57:15.862Z",
                    "quizNo": 5,
                    "chName": "ch5-",
                },
                "mark": 13.5
            },
        ],
    };
    
      @override
      Widget build(BuildContext context) {
        return Container(
        alignment:Alignment.center,
        child:ListView.builder(
        itemCount:jsonData['quizzes'].length,
        shrinkWrap:true,
         itemBuilder:(con,ind){
           return ListTile(
           title:Text(jsonData['quizzes'][ind]['quiz']['quizName']),
             subtitle:Text(jsonData['quizzes'][ind]['quiz']['quizDate'])
           );
         }
        )
        );
      }
    

    【讨论】:

      【解决方案2】:

      试着把你的模型改成这个

      // To parse this JSON data, do
      //
      //     final quizzes = quizzesFromJson(jsonString);
      
      import 'dart:convert';
      
      Quizzes quizzesFromJson(String str) => Quizzes.fromJson(json.decode(str));
      
      String quizzesToJson(Quizzes data) => json.encode(data.toJson());
      
      class Quizzes {
          final List<QuizElement> quizzes;
      
          Quizzes({
              this.quizzes,
          });
      
          factory Quizzes.fromJson(Map<String, dynamic> json) => Quizzes(
              quizzes: json["quizzes"] == null ? null : List<QuizElement>.from(json["quizzes"].map((x) => QuizElement.fromJson(x))),
          );
      
          Map<String, dynamic> toJson() => {
              "quizzes": quizzes == null ? null : List<dynamic>.from(quizzes.map((x) => x.toJson())),
          };
      }
      
      class QuizElement {
          final QuizQuiz quiz;
          final double mark;
      
          QuizElement({
              this.quiz,
              this.mark,
          });
      
          factory QuizElement.fromJson(Map<String, dynamic> json) => QuizElement(
              quiz: json["quiz"] == null ? null : QuizQuiz.fromJson(json["quiz"]),
              mark: json["mark"] == null ? null : json["mark"].toDouble(),
          );
      
          Map<String, dynamic> toJson() => {
              "quiz": quiz == null ? null : quiz.toJson(),
              "mark": mark == null ? null : mark,
          };
      }
      
      class QuizQuiz {
          final String quizName;
          final DateTime quizDate;
          final int quizNo;
          final String chName;
      
          QuizQuiz({
              this.quizName,
              this.quizDate,
              this.quizNo,
              this.chName,
          });
      
          factory QuizQuiz.fromJson(Map<String, dynamic> json) => QuizQuiz(
              quizName: json["quizName"] == null ? null : json["quizName"],
              quizDate: json["quizDate"] == null ? null : DateTime.parse(json["quizDate"]),
              quizNo: json["quizNo"] == null ? null : json["quizNo"],
              chName: json["chName"] == null ? null : json["chName"],
          );
      
          Map<String, dynamic> toJson() => {
              "quizName": quizName == null ? null : quizName,
              "quizDate": quizDate == null ? null : quizDate.toIso8601String(),
              "quizNo": quizNo == null ? null : quizNo,
              "chName": chName == null ? null : chName,
          };
      }
      

      【讨论】:

        猜你喜欢
        • 2014-04-15
        • 2016-05-06
        • 2019-06-21
        • 2020-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-09
        • 2015-09-13
        相关资源
        最近更新 更多