Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在flatter中从JSON文件中获取数据_Flutter_Dart - Fatal编程技术网

Flutter 如何在flatter中从JSON文件中获取数据

Flutter 如何在flatter中从JSON文件中获取数据,flutter,dart,Flutter,Dart,我有这个JSON文件,我想获取“name”字段,但我对JSON文件没有更好的理解。请任何人解释我如何读取这个JOSN文件格式,以及我如何访问“name”字段进行打印。我尝试了多种代码,但都没有成功 { "stream": { "tv": [{ "name": "Tv", "description": "Tv", "url": "this is the url", "image"

我有这个JSON文件,我想获取“name”字段,但我对JSON文件没有更好的理解。请任何人解释我如何读取这个JOSN文件格式,以及我如何访问“name”字段进行打印。我尝试了多种代码,但都没有成功

{
    "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 
      )
    );
  }
}
导入'dart:convert';
进口“包装:颤振/材料.省道”;
将“package:http/http.dart”导入为http;
void main()=>runApp(HomePage());
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
列表数据=[];
@凌驾
void initState(){
fetchData();
super.initState();
}
void fetchData()异步{
最后答复=
等待http.get('Link here');
如果(response.statusCode==200){
设置状态(){
data=json.decode(response.body);
});
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:中(
child:Text(数据[0][“stream”][“adomtv”][0][“name”]),//我如何在此处访问给定的Json字段
)
);
}
}
以下是和

jsonDecode()返回一个映射,因此我相信访问

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

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

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

然后您可以作为数组访问

当前,您的代码似乎有输入错误。使用MTV而不是电视。

因此我尝试了以下方法:

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'] 以及收音机的数据['stream'[1]['name']。 因此,我的建议是仔细检查服务器数据流


希望这有帮助。

看,您有列表类型数据
列表数据=[];
需要整数值索引,因此如果您将其作为字符串,则可以使用您想要的方式。如果您希望像这样访问它,并且您正在处理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",

        }]
    }
}
]

现在您可以按自己的方式访问。这将适用于您知道的
数据[0][“stream”][“adomtv”][0][“name”]

在我的情况下,我的JSON文件格式是更改的,这是不值得的。你提到的另一个,我成功地处理了它,但无法处理此格式。就像我的文件中的嵌套对象或嵌套花括号一样,这很混乱。你可以将此JSON解析为字符串,然后使用模型类的fromJson方法来获取实际值对象:从解析的字符串中。谢谢Sharad paghadal,如果你为它编写代码,它会更有用,因为你的回答是克里斯,但是只考虑写的JSON文件而不是那个链接。我只是更新问题。我只需要知道访问“名称”的顺序。属性。在发布问题之前,我也尝试过这个方法,但遇到错误“参数类型'String'无法分配给参数类型'int'。就像编译器需要将Ist数据作为整数来知道json文件的索引一样。我如何才能摆脱真正的问题。我甚至尝试过这个文本(数据[0][“stream”][“tv”][0][“name”]),通过这样做,我得到了错误“RangeError(index):无效值:有效值范围为空:0”。感谢您回答Marcio。通过这样做,我成功地读取了另一个Json文本(数据[0][“name”])因此,我无法通过感谢您的回复Chris。我不想更改我的JSON格式是完全正确的。但是当我放入[]时这些括号位于我的JSON之外,没有它我可以轻松访问JSON。如果您认为我的JSON格式错误,请解释错误,因为您编写的格式不是必需的。基本上,您需要使用[“words”]来浏览花括号和[number]导航方括号。这是我唯一的建议。@ChrisReynolds你能帮我看看我的问题吗?我面临着一个类似的问题。好的,去更新json并运行此代码,以防有任何问题让我知道。再次感谢先生,这是我犯的真正错误。我根据答案更新json并立即上传到服务器你们的代码都运行得很好。你们节省了我的时间。谢谢你们,永远幸福快乐。:)