【问题标题】:flutter nested json array of object parsing颤振嵌套对象解析的json数组
【发布时间】:2020-11-15 06:36:49
【问题描述】:

您好,我正在构建一个应用程序并尝试从 api 回调中解析嵌套的对象数组并收到此错误

String 类型不是 Map 的子类型

这里是模型类

class Tournament {
  String id;
  String title;
  String roomID;
  String roomPass;
  String map;
  String type;
  String date;
  String time;
  int joined;
  String createdBy;
  List<UserIds> joinedUsers;

  Tournament(
      {this.createdBy,
      this.joinedUsers,
      this.id,
      this.date,
      this.map,
      this.roomID,
      this.roomPass,
      this.time,
      this.title,
      this.type,
      this.joined});

  factory Tournament.fromJson(Map<String, dynamic> json) {
    var list = json['joinedUsers'] as List;
    List<UserIds> userList =
        list.map((data) => UserIds.fromJson(data)).toList();

    return Tournament(
        id: json['_id'],
        title: json['title'],
        roomID: json['roomId'],
        roomPass: json['roomPass'],
        map: json['mapType'],
        type: json['type'],
        date: json['date'],
        time: json['time'],
        joined: json['joined'],
        createdBy: json['createdBy'],
        joinedUsers: userList);
  }
}

class UserIds {
  String userId;

  UserIds({this.userId});

  factory UserIds.fromJson(Map<String, dynamic> parsedJson) {
    return UserIds(userId: parsedJson['\$oid']);
  }
}

这是我收到的 json 回调

{
    "_id": {
        "$oid": "5f1c47f2c3c051d9828b1697"
    },
    "joinedUsers": [{
        "$oid": "5f18621d6fca9d3e70a9fabe"
    }, {
        "$oid": "5f1a7609f7f69d2a1064e5ec"
    }],
    "title": "HomeComing",
    "date": "20-02-2020",
    "time": "8:22 Am",
    "roomId": "12345",
    "roomPass": "12223",
    "joined": {
        "$numberInt": "9"
    },
    "mapType": "Erangle",
    "type": "Dual",
    "createdBy": {
        "$oid": "5f16d9bde0fd621dec10e1c5"
    },
    "__v": {
        "$numberInt": "0"
    }
}

现在,当我运行它时,它给了我一个错误,即 String 类型不是 Map 的子类型 我不知道我现在做错了什么

【问题讨论】:

  • 请分享您的fromJson 构造函数在哪里使用,而不仅仅是定义它们的位置。 Edit 代码直接进入你的问题。不要在评论中发布。

标签: json dictionary flutter dart


【解决方案1】:

你可以试试:

list.map((data) => UserIds.fromJson(JSON.parse(data)).toList();

可能是解析问题,您可以先在 lambda 中记录您的元素,以验证它提供了什么:

list.map((element) =>
{
  console.log(data);
  //UserIds.fromJson(JSON.parse(data)).toList();
});

【讨论】:

  • 你能说出 JSON.parse 来自什么吗?我不认为它是 dart 中的一个函数
  • 好的,现在我收到此错误type 'MappedListIterable&lt;dynamic, void&gt;' is not a subtype of type 'List&lt;UserIds&gt;')
  • ok 数据在控制台打印但又抛出异常type 'List&lt;void&gt;' is not a subtype of type 'List&lt;UserIds&gt;'
  • 能否把打印出来的数据打印出来,确定一下
【解决方案2】:

看看我为 userIds 制作的这个例子: 我已经在本地获取了你的 json。

import 'dart:convert';

import 'package:flutter/material.dart';


void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: HomePage());
  }
}

class UserIds {
  String userId;

  UserIds({this.userId});
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  bool _isLoading = false;

  List<UserIds> userIdsList = List();

  @override
  void initState() {
    super.initState();
    getData();
  }

  getData() async {
   
    String data =
        await DefaultAssetBundle.of(context).loadString("json/parse.json");

    Map jsonData = json.decode(data);

    jsonData['joinedUsers'].forEach((item) {
      item.forEach((key, value) {
        print('This is the Key $key  value $value');
        userIdsList.add(UserIds(userId: value));
      });
    });

    print('This is the list ${userIdsList.length}');

   
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(body: Text(''));
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 2023-03-22
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2018-06-30
    • 2020-08-14
    相关资源
    最近更新 更多