一尘不染

在Dart中未获得所需的json响应

flutter

我目前正在构建一个应用程序,以从json API获取数据。我想从json代码中获取数字54。

这是json
链接

我试图在这里制作json api的模型类

class TeerModel{
  String text;
  TeerModel(this.text);
  TeerModel.fromJson(Map<String, dynamic>parsedJson){
    text = parsedJson['text'];
  }
}

但是我无法得到结果,所以我将其删除

这是代码

import 'package:flutter/material.dart';
import 'package:http/http.dart' show get;
import 'models/teer_model.dart';
import 'dart:convert';


class Appss extends StatefulWidget {
  @override
  _AppssState createState() => _AppssState();
}

class _AppssState extends State<Appss> {

  String result = "1S";

  void fetchData ()async{
    var response1 = await get("http://motyar.info/webscrapemaster/api/?url=http://teertoday.com/&xpath=/html/body/div[5]/div/table/tbody/tr[3]/td[1]#vws");
    var teerModel =  json.decode(response1.body);
    var line = teerModel["text"].replaceAll(new RegExp(r"(\s\n)"), "");
    print(line);

  }


  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Teer result"),),
        floatingActionButton: FloatingActionButton(
          onPressed: fetchData,
        ),
        body: Center(
          child: Text("The result is: $result"),
        ),
      ),
    );
  }
}

我只想从“文本”中获取数字54,所以我使用正则表达式

我预计输出将是54,但我收到此错误

图片


阅读 250

收藏
2020-08-13

共1个答案

一尘不染

如果查看json,您会发现它完全被包围[...],意味着它是一个json数组。json.decode会将其转换为Dart
List<Map<String, dynamic>>。看起来您想要此数组/列表的第一个/第零个元素。

更改:

var line = teerModel["text"].replaceAll(new RegExp(r"(\s\n)"), "");

var line = teerModel[0]["text"].replaceAll(new RegExp(r"(\s\n)"), "");

不要忘了打电话,setState这样您的小部件就会重新构建。

2020-08-13