首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试解析JSON文件,但它返回_TypeError (键入'_InternalLinkedHashMap<String,dynamic>‘不是类型’String‘的子类型)

尝试解析JSON文件,但它返回_TypeError (键入'_InternalLinkedHashMap<String,dynamic>‘不是类型’String‘的子类型)
EN

Stack Overflow用户
提问于 2022-08-11 08:33:22
回答 1查看 23关注 0票数 0

我试图解析一个远程json,但是我总是得到这个错误_TypeError (type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'),我试图尽可能地简化示例,因为我的模型有点复杂,而且JSON有5000多个单词。

这是我的功能:

代码语言:javascript
复制
Future<void> updateCrypto(String symbol) async {

    Uri url = Uri.https(); // url where I get the json

    try {
      final response = await http.get(url);

      final parsedJson = json.decode(response.body) as Map<String, dynamic>;
      final Cryptocurrency updatedCrypto = Cryptocurrency.fromJson(parsedJson);

    } catch (error) {
      throw (error);
    }
  }

我的模特:

代码语言:javascript
复制
class Cryptocurrency with ChangeNotifier {
  Cryptocurrency({
    required this.id,
    required this.symbol,
    required this.name,
    ...
  });

  late final String id;
  late final String symbol;
  late final String name;
  ...

  factory Cryptocurrency.fromJson(Map<String, dynamic> json) {
    return Cryptocurrency(
        id: json['id'],
        symbol: json['symbol'],
        name: json['name'],
        ...
  }
}

Json示例(因为它是一个5000字的json文件):

代码语言:javascript
复制
{"id":"bitcoin","symbol":"btc","name":"Bitcoin",   }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-11 09:17:51

我喜欢修改实体和用例,如

代码语言:javascript
复制
import 'dart:convert';

class Cryptocurrency with ChangeNotifier {
  final String id;
  final String symbol;
  final String name;
  Cryptocurrency({
    required this.id,
    required this.symbol,
    required this.name,
  });

  Map<String, dynamic> toMap() {
    final result = <String, dynamic>{};

    result.addAll({'id': id});
    result.addAll({'symbol': symbol});
    result.addAll({'name': name});

    return result;
  }

  factory Cryptocurrency.fromMap(Map<String, dynamic> map) {
    return Cryptocurrency(
      id: map['id'] ?? '',
      symbol: map['symbol'] ?? '',
      name: map['name'] ?? '',
    );
  }

  String toJson() => json.encode(toMap());

  factory Cryptocurrency.fromJson(String source) =>
      Cryptocurrency.fromMap(json.decode(source));
}

用例

代码语言:javascript
复制
     final response = await http.get(Uri.parse(url));
     final parsedJson = json.decode(response.body);

     if (response.statusCode == 200) {
      final data = jsonDecode(response.body);
      final Cryptocurrency updatedCrypto = Cryptocurrency.fromJson(data);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73317643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档