如何在 dart 中从服务器解码 json?

Posted

技术标签:

【中文标题】如何在 dart 中从服务器解码 json?【英文标题】:how to decode json from server in dart? 【发布时间】:2021-12-04 06:39:24 【问题描述】:

我想解码状态码为 200 时从服务器返回的 json 并将它们初始化为一个变量,但我不知道该怎么做。

这是我对服务器的请求代码:

_SendInquiryReq(
    required BuildContext context,
  ) async 
    final prefs = await SharedPreferences.getInstance();
    var tok = prefs.getString('tok');

    var Num = NumberController.text;

    var headers = 
      'X-Requested-With': 'XMLHttpRequest',
      'Authorization': 'Bearer $tok',
      'Cookie':
          '.AspNetCore.Session = some thing'
    ;

    var request = http.MultipartRequest(
        'GET', Uri.parse('my Link/$Num'));

    request.headers.addAll(headers);

    http.StreamedResponse response = await request.send();

    if (response.statusCode == 200) 
      print(await response.stream.bytesToString());
      print("Ok");
     else 
      print(response.reasonPhrase);
    
  

【问题讨论】:

响应如何 它包含这样的东西: "id": "c137c733-2dd9-4ee5-9469-107388e5f4ab", 我想解码这个“id” 【参考方案1】:

您需要创建一个将您的 JSON 映射到类实例的类,如下所示:

class IdModel 
  String id;

  IdModel(this.id);

  IdModel.fromJson(Map<String, dynamic> json) 
    id = json['id'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    return data;
  

现在,每当您获得原始 JSON 响应时,只需使用这样的类:

IdModel model = IdModel.fromJson(yourJson);

使用model 获取ID!

【讨论】:

【参考方案2】: 首先,您必须使用await 等待响应完成接收 继续使用jsonDecodejson.decode 方法解码成地图 您可以访问您的数据,例如decodedMap['id']

final headers = 'key': 'value'; final request = http.MultipartRequest('POST', Uri.parse('uri')); request.headers.addAll(headers); final response = await request.send(); final reponseString = await response.stream.bytesToString(); final decodeMap = json.decode(reponseString);

【讨论】:

以上是关于如何在 dart 中从服务器解码 json?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 dart/flutter 中解码复杂的 json?

如何在我的 Flutter 应用程序中从 JWT 获取声明

如何在 dart 的 Future 函数中从 JSON 创建一个类对象?

在 Flutter/Dart 中从 JSON 数组中提取数据

如何在laravel刀片中从json解码中回显键名和键值

在 Flutter 和 Dart 中从 JSON 解析双精度值