You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何将复杂JSON数据解析后以列表形式展示

Flutter复杂嵌套JSON解析及列表展示完整实现方案

以下是可直接运行的实现代码,供Flutter入门开发者参考:

用到的JSON结构示例

{
    "product": "astro",
    "init": "2021083118",
    "dataseries": [{
        "timepoint": 3,
        "cloudcover": 5,
        "seeing": 7,
        "transparency": 5,
        "lifted_index": -1,
        "rh2m": 12,
        "wind10m": {
            "direction": "NE",
            "speed": 2
        },
        "temp2m": 28,
        "prec_type": "none"
    },
    // 其余dataseries结构与上述示例一致
    ]
}

主类代码(main.dart)

import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import '7Timer.dart';

void main() {
  runApp(MaterialApp(
    home: HomePage()
  ));
}

class HomePage extends StatefulWidget {
  @override
  HomePageState createState() => HomePageState();
}

class HomePageState extends State<HomePage> {
  late String p;
  late String i;
  late List<Dataseries> d;

  Future<String> getData() async {
    var response = await http.get(
      Uri.parse("https://www.7timer.info/bin/astro.php?lon=113.2&lat=23.1&ac=0&unit=metric&output=json&tzshift=0"),
    );
    Map<String,dynamic> userMap = jsonDecode(response.body);
    var timer = Timer.fromJson(userMap);
    setState(() {
      p = timer.product;
      i = timer.init;
      d = timer.data;
    });
    return "Success!";
  }

  @override
  void initState(){
    getData();
  }

  @override
  Widget build(BuildContext context){
    return Scaffold(
      appBar: AppBar(title: const Text("Listviews"), backgroundColor: Colors.blue),
      body: ListView.builder(
        itemCount: d == null ? 0 : d.length,
        itemBuilder: (BuildContext context, int index){
          return Card(
            child: Text('timepoint=${d[index].timepoint} seeing=${d[index].seeing} cloudcover=${d[index].cloudcover}'),
          );
        },
      ),
    );
  }
}

模型类代码(7Timer.dart)

class Timer {
  final String product;
  final String init;
  final List<Dataseries> data;

  Timer({required this.product, required this.init, required this.data});

  factory Timer.fromJson(Map<String, dynamic> json) {
    var list = json['dataseries'] as List;
    List<Dataseries> dataList = list.map((i) => Dataseries.fromJson(i)).toList();
    return Timer(
      product:json['product'],
      init:json['init'],
      data:dataList,
    );
  }

  Map<String, dynamic> toJson() => {
    'product': product,
    'init': init,
  };
}

class Dataseries {
  int timepoint;
  int cloudcover;
  int seeing;
  int transparency;
  int lifted_index;
  int rh2m;

  Dataseries(this.timepoint, this.cloudcover,this.seeing,this.transparency,this.lifted_index,this.rh2m);

  Dataseries.fromJson(Map<String, dynamic> json)
      : timepoint = json['timepoint'],
        cloudcover = json['cloudcover'],
        seeing = json['seeing'],
        transparency = json['transparency'],
        lifted_index = json['lifted_index'],
        rh2m = json['rh2m'];

  Map<String, dynamic> toJson() => {
    'timepoint': timepoint,
    'cloudcover': cloudcover,
    'seeing' : seeing, 
    'transparency' : transparency,
    'lifted_index' : lifted_index,
    'rh2m' : rh2m
  };
}

内容的提问来源于stack exchange,提问作者Aditya Prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:12:00