首页 > 解决方案 > 为什么我的 json 代码给出了 Post 实例

问题描述

我正在尝试从互联网上获取数据。这是 json 字符串:

{"channel":{"id":1090161,"name":"İscaklik","description":"İscakliği okeyrum da.","latitude":"0.0","longitude":"0.0","field1":"nem","field2":"iscaklik","created_at":"2020-06-27T11:56:47Z","updated_at":"2020-06-27T11:56:47Z","last_entry_id":1},"feeds":[{"created_at":"2020-06-27T12:02:32Z","entry_id":1,"field1":"5"}]}

我想在“提要”中获得“field1”。我的代码是这样的:

class _DataState extends State<Data> {
  Future<String> AlbumState;
  void initState() {
    super.initState();
    oku();
  }

  var a;

  Future<List<Post>> oku() async {
    final response = await http.get(
        'https://api.thingspeak.com/channels/1090161/fields/1.json?api_key=JD9JYHAT2YHOI5Q3&results=1');
    if (response.statusCode == 200) {
      var responseJson = json.decode(response.body);
      return (responseJson['feeds'] as List)
          .map((p) => Post.fromJson(p))
          .toList();
    } else {
      throw Exception('La bulamadık la böyle bi şey yoh la');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Fetch Data Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: Center(
          child: FutureBuilder<List<Post>>(
            future: oku(),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return Text(snapshot.data.toString());
              } else if (snapshot.hasError) {
                return Text("${snapshot.error}");
              }
              return CircularProgressIndicator();
            },
          ),
        ),
      ),
    );
  }
}

class Post {
  final String field1;

  Post({this.field1});

  factory Post.fromJson(Map<String, dynamic> json) {
    return new Post(
      field1: json['entry_id'].toString(),
    );
  }
}

这是结果: 它给了我这个

我想看 5.(哪个是提要的 field1)为什么我会看到这个?我怎样才能解决这个问题?

标签: jsonflutterdart

解决方案


Just Copy And Paste 这个模型类和简单的使用

 if (response.statusCode == 200) {
      var responseJson = json.decode(response.body);
       ModelChannel channel = ModelChannel.fromJson(responseJson);
      
      return  channel.feeds;
    } else {
      throw Exception('La bulamadık la böyle bi şey yoh la');
    }

这是您的 JSON 模型

class ModelChannel {
        Channel channel;
        List<Feed> feeds;
    
        ModelChannel({this.channel, this.feeds});
    
        factory ModelChannel.fromJson(Map<String, dynamic> json) {
            return ModelChannel(
                channel: json['channel'] != null ? Channel.fromJson(json['channel']) : null, 
                feeds: json['feeds'] != null ? (json['feeds'] as List).map((i) => Feed.fromJson(i)).toList() : null, 
            );
        }
    
        Map<String, dynamic> toJson() {
            final Map<String, dynamic> data = new Map<String, dynamic>();
            if (this.channel != null) {
                data['channel'] = this.channel.toJson();
            }
            if (this.feeds != null) {
                data['feeds'] = this.feeds.map((v) => v.toJson()).toList();
            }
            return data;
        }
    }
    
    class Feed {
        String created_at;
        int entry_id;
        String field1;
    
        Feed({this.created_at, this.entry_id, this.field1});
    
        factory Feed.fromJson(Map<String, dynamic> json) {
            return Feed(
                created_at: json['created_at'], 
                entry_id: json['entry_id'], 
                field1: json['field1'], 
            );
        }
    
        Map<String, dynamic> toJson() {
            final Map<String, dynamic> data = new Map<String, dynamic>();
            data['created_at'] = this.created_at;
            data['entry_id'] = this.entry_id;
            data['field1'] = this.field1;
            return data;
        }
    }
    
    class Channel {
        String created_at;
        String description;
        String field1;
        String field2;
        int id;
        int last_entry_id;
        String latitude;
        String longitude;
        String name;
        String updated_at;
    
        Channel({this.created_at, this.description, this.field1, this.field2, this.id, this.last_entry_id, this.latitude, this.longitude, this.name, this.updated_at});
    
        factory Channel.fromJson(Map<String, dynamic> json) {
            return Channel(
                created_at: json['created_at'], 
                description: json['description'], 
                field1: json['field1'], 
                field2: json['field2'], 
                id: json['id'], 
                last_entry_id: json['last_entry_id'], 
                latitude: json['latitude'], 
                longitude: json['longitude'], 
                name: json['name'], 
                updated_at: json['updated_at'], 
            );
        }
    
        Map<String, dynamic> toJson() {
            final Map<String, dynamic> data = new Map<String, dynamic>();
            data['created_at'] = this.created_at;
            data['description'] = this.description;
            data['field1'] = this.field1;
            data['field2'] = this.field2;
            data['id'] = this.id;
            data['last_entry_id'] = this.last_entry_id;
            data['latitude'] = this.latitude;
            data['longitude'] = this.longitude;
            data['name'] = this.name;
            data['updated_at'] = this.updated_at;
            return data;
        }
    }

推荐阅读