如何从flutter中的JSON文件中获取数据

时间:2019-09-23 18:14:45

标签: flutter dart

我有这个JSON文件,我想获取“名称”字段,但是我对JSON文件没有更好的了解,谁能解释我如何读取此JOSN文件格式以及如何访问“名称”字段进行打印。我尝试了多个代码,但没有成功。

{
    "stream": {
        "tv": [{
            "name": "Tv",
            "description": "Tv",
            "url": "this is the url",
            "image": "imagelink",

        }]
    }
}

代码在这里

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

void main() => runApp(HomePage());

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
  List data=[];
  @override
  void initState() {
    fetchData();
    super.initState();
  }

  void fetchData() async {
    final response =
    await http.get('Link here');
    if (response.statusCode == 200) {
      setState(() {
        data = json.decode(response.body);
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Text(data[0]["stream"]["adomtv"][0]["name"]),// how can I access given Json fields here 
      )
    );
  }
}

5 个答案:

答案 0 :(得分:2)

看起来您有列表类型数据List data=[];,该数据需要整数形式的索引,因此,如果将其作为字符串使用,则可以使用所需的方式。如果您想像这样访问它,并且可以处理JSON而不是将JSON转换

{
    "stream": {
        "tv": [{
            "name": "Tv",
            "description": "Tv",
            "url": "this is the url",
            "image": "imagelink",

        }]
    }
}

将其转换为

[
{
    "stream": {
        "tv": [{
            "name": "Tv",
            "description": "Tv",
            "url": "this is the url",
            "image": "imagelink",

        }]
    }
}
]

现在,您可以访问所需的方式。这将为您工作data[0]["stream"]["adomtv"][0]["name"]

答案 1 :(得分:1)

所以我尝试了这个:

import 'dart:convert';

main() {
  String jsonS = """{
    "stream": {
        "tv": [{
            "name": "Tv",
            "description": "Tv",
            "url": "this is the url",
            "image": "imagelink"

        }]
    }
}""";
  var myMap = json.decode(jsonS);
  var myName = myMap['stream']['tv'][0]['name'];
  print('${myName}');
}

这可以正常工作并产生电视的名称。

但是,我认为您的json中有错字。我的猜测是,您正在获得一堆对象,其中之一就是电视。 因此,我希望您的json看起来更像:

{ 
        "stream": { [
            {
                "name": "Tv",
                "description": "Tv",
                "url": "this is the url",
                "image": "imagelink"

            },
            {
                "name": "Radio",
                "description": "Radio",
                "url": "this is the url",
                "image": "imagelink"

            },

]}

如果是这种情况,您只需要电视的数据['stream'] [0] ['name'] 以及无线电的data ['stream'[1] ['name']。 因此,我的建议是仔细检查服务器数据流。

希望这会有所帮助。

答案 2 :(得分:0)

这是dochere

jsonDecode()返回一个Map,所以我相信访问权限将会

data["stream"]["tv"][0]["name"]

答案 3 :(得分:0)

您需要解码json字符串,例如:

Settings settingsFromJson(String str) {
  final jsonData = json.decode(str);
  return Settings.fromJson(jsonData);
}

然后您可以作为数组访问

答案 4 :(得分:0)

当前看来您的代码有错字。而不是电视。