Flutter:如何正确读取 JSON 中的字段?

Posted

技术标签:

【中文标题】Flutter:如何正确读取 JSON 中的字段?【英文标题】:Flutter: How to properly read a field from a JSON? 【发布时间】:2021-11-04 13:28:01 【问题描述】:

请检查以下颤振代码

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


class UserService with ChangeNotifier 
  NavLinks _navLinks = NavLinks();
  late User _user;

  Future<int> saveUser(User user, String authToken) async 
    print(convert.json.encode(user.toJson()));
    int responsetag = 0;
    try 
      await http.post(Uri.parse(_navLinks.saveUser()),
          body: convert.json.encode(user.toJson()),
          headers: 
            "Accept": "application/json",
            "content-type": "application/json",
            HttpHeaders.authorizationHeader: "Bearer $authToken"
          ).then((http.Response response) 
        final int statusCode = response.statusCode;

        print("RESPONSE: " + response.body);
        print("STATUS CODE: " + statusCode.toString());

        if (statusCode < 200 || statusCode > 400) 
          throw new Exception("Error while fetching data");
         else 
          Map<String, dynamic> data = convert.jsonDecode(response.body);

          responsetag = int.parse(data["insertId"]);
        
      );

      return responsetag;
     catch (error) 
      throw (error);
    
  

在这里我需要提取insertId,将其转换为int 并传递过去。但我总是以错误[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Exception: type 'int' is not a subtype of type 'String'告终。

这里有什么问题?

【问题讨论】:

我不认为错误来自这里,你在哪里使用这个号码?错误来自 UI,我认为它是某个地方的 Text 小部件。分享该代码。 @Benyamin:嗯,它用在一个代码行中,除了这个int userid = await userService.saveUser(user, authToken); 此错误来自 UI,这意味着您已将整数值传递给期望字符串值的小部件,您应该对其使用 toString() 方法,错误来自 UI。 你能提供一些示例数据/响应 【参考方案1】:

根据您的代码data["insertId"] 应该是一个字符串。

如果data["insertId"] 是一个字符串,

responsetag = int.parse(data["insertId"]);

如果data["insertId"] 是一个整数,

responsetag = data["insertId"];

【讨论】:

谢谢。你谈到了这一点。这是一个 int,所以第二行代码确实有效【参考方案2】:

尝试改变这一点:

responsetag = int.parse(data["insertId"]);

到这里

responsetag = int.parse(data["insertId"].toString());

【讨论】:

以上是关于Flutter:如何正确读取 JSON 中的字段?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何正确地对“列表”进行 JSON 编码?

json - 如何在 flutter 中的List String中加入2 json值?

如何在颤振本地化中读取嵌套的 json?

Flutter开发之JSON读取和解析

flutter上没有互联网连接时如何读取本地文件?

如何使用提供的建议生成在不正确的单词下划线的 Flutter 文本字段?