繁体   English   中英

flutter 嵌套 json 数组的 object 解析

[英]flutter nested json array of object parsing

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

String 类型不是 Map<String, dynamic> 的子类型

这是 model class

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<String, dynamic> 的子类型我不知道我现在做错了什么

你能试试:

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

可能是解析问题,您可以先在 lambda 中记录您的元素,以验证它给出的内容:

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

只需查看我为 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(''));
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM