【问题标题】:Getting values and keys from nested JSON flutter从嵌套的 JSON Flutter 中获取值和键
【发布时间】:2019-12-19 13:57:56
【问题描述】:

所以,这是一个经过编辑的问题。在我按照建议使用 json 到转换器之后,我设法生成了这个

// To parse this JSON data, do
//
//     final user = userFromJson(jsonString);

import 'dart:convert';

Map<String, Map<String, Map<String, Map<String, User>>>> userFromJson(String str) => new Map.from(json.decode(str)).map((k, v) => new MapEntry<String, Map<String, Map<String, Map<String, User>>>>(k, new Map.from(v).map((k, v) => new MapEntry<String, Map<String, Map<String, User>>>(k, new Map.from(v).map((k, v) => new MapEntry<String, Map<String, User>>(k, new Map.from(v).map((k, v) => new MapEntry<String, User>(k, User.fromJson(v)))))))));

String userToJson(Map<String, Map<String, Map<String, Map<String, User>>>> data) => json.encode(new Map.from(data).map((k, v) => new MapEntry<String, dynamic>(k, new Map.from(v).map((k, v) => new MapEntry<String, dynamic>(k, new Map.from(v).map((k, v) => new MapEntry<String, dynamic>(k, new Map.from(v).map((k, v) => new MapEntry<String, dynamic>(k, v.toJson())))))))));

class User {
    String userClass;
    String name;

    User({
        this.userClass,
        this.name,
    });

    factory User.fromJson(Map<String, dynamic> json) => new User(
        userClass: json["class"],
        name: json["name"],
    );

    Map<String, dynamic> toJson() => {
        "class": userClass,
        "name": name,
    };
}

但是,当我尝试访问 userClass 和 name 时,它​​返回 null

这是我的json。 如果我这样做

final val = json.decode(jsonString);
final data = User.fromJson(val); 

数据将返回“用户实例”。 如果我使用

final user = userFromJson(jsonString);

我会得到这个: {12341:{2014:{11:{21:“用户”实例}}},46546:{2013:{11:{21:“用户”实例}}}}

【问题讨论】:

    标签: android json flutter


    【解决方案1】:

    将您的 JSON 字符串粘贴到 https://app.quicktype.io/,它将验证您的 JSON 字符串并转换为您需要的类。

    示例学生 JSON 字符串

    [
      {
        "ID": "1",
        "Name": "Senpai",
        "Gender": "1",
        "Class": "32",
        "Seat": "15",
        "Club": "0",
        "Persona": "1",
        "Crush": "0",
        "BreastSize": "0",
        "Strength": "0",
        "Hairstyle": "1",
        "Color": "Black",
        "Eyes": "Black",
        "EyeType": "Default",
        "Stockings": "None",
        "Accessory": "0",
        "ScheduleTime": "7_7_8_13.01_13.375_15.5_16_17.25_99_99",
        "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Hangout_Locker_Exit",
        "ScheduleAction": "Stand_Stand_Read_Sit_Eat_Sit_Clean_Read_Shoes_Stand",
        "Info": "An average student. \n \n Average grades, average looks, average life... \n \n I'm not sure what you see in him."
      },
      {
        "ID": "2",
        "Name": "Yui Rio",
        "Gender": "0",
        "Class": "11",
        "Seat": "14",
        "Club": "1",
        "Persona": "5",
        "Crush": "0",
        "BreastSize": "0.5",
        "Strength": "0",
        "Hairstyle": "2",
        "Color": "Red",
        "Eyes": "Red",
        "EyeType": "Default",
        "Stockings": "Red",
        "Accessory": "0",
        "ScheduleTime": "7_7_8_13_13.375_15.5_16_17.25_99_99",
        "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Club_Locker_Exit",
        "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_SocialSit_Shoes_Stand",
        "Info": ""
      }
    ]
    

    和解析这个例子的代码

    // To parse this JSON data, do
    //
    //     final payload = payloadFromJson(jsonString);
    
    import 'dart:convert';
    
    List<Payload> payloadFromJson(String str) => new List<Payload>.from(json.decode(str).map((x) => Payload.fromJson(x)));
    
    String payloadToJson(List<Payload> data) => json.encode(new List<dynamic>.from(data.map((x) => x.toJson())));
    
    class Payload {
        String id;
        String name;
        String gender;
        String payloadClass;
        String seat;
        String club;
        String persona;
        String crush;
        String breastSize;
        String strength;
        String hairstyle;
        String color;
        String eyes;
        String eyeType;
        String stockings;
        String accessory;
        String scheduleTime;
        String scheduleDestination;
        String scheduleAction;
        String info;
    
        Payload({
            this.id,
            this.name,
            this.gender,
            this.payloadClass,
            this.seat,
            this.club,
            this.persona,
            this.crush,
            this.breastSize,
            this.strength,
            this.hairstyle,
            this.color,
            this.eyes,
            this.eyeType,
            this.stockings,
            this.accessory,
            this.scheduleTime,
            this.scheduleDestination,
            this.scheduleAction,
            this.info,
        });
    
        factory Payload.fromJson(Map<String, dynamic> json) => new Payload(
            id: json["ID"],
            name: json["Name"],
            gender: json["Gender"],
            payloadClass: json["Class"],
            seat: json["Seat"],
            club: json["Club"],
            persona: json["Persona"],
            crush: json["Crush"],
            breastSize: json["BreastSize"],
            strength: json["Strength"],
            hairstyle: json["Hairstyle"],
            color: json["Color"],
            eyes: json["Eyes"],
            eyeType: json["EyeType"],
            stockings: json["Stockings"],
            accessory: json["Accessory"],
            scheduleTime: json["ScheduleTime"],
            scheduleDestination: json["ScheduleDestination"],
            scheduleAction: json["ScheduleAction"],
            info: json["Info"],
        );
    
        Map<String, dynamic> toJson() => {
            "ID": id,
            "Name": name,
            "Gender": gender,
            "Class": payloadClass,
            "Seat": seat,
            "Club": club,
            "Persona": persona,
            "Crush": crush,
            "BreastSize": breastSize,
            "Strength": strength,
            "Hairstyle": hairstyle,
            "Color": color,
            "Eyes": eyes,
            "EyeType": eyeType,
            "Stockings": stockings,
            "Accessory": accessory,
            "ScheduleTime": scheduleTime,
            "ScheduleDestination": scheduleDestination,
            "ScheduleAction": scheduleAction,
            "Info": info,
        };
    }
    

    关于您的 JSON 字符串,您可以使用以下内容对其进行解析

    // To parse this JSON data, do
    //
    //     final payload = payloadFromJson(jsonString);
    
    import 'dart:convert';
    
    Payload payloadFromJson(String str) => Payload.fromJson(json.decode(str));
    
    String payloadToJson(Payload data) => json.encode(data.toJson());
    
    class Payload {
        The12341 the12341;
    
        Payload({
            this.the12341,
        });
    
        factory Payload.fromJson(Map<String, dynamic> json) => new Payload(
            the12341: The12341.fromJson(json["12341"]),
        );
    
        Map<String, dynamic> toJson() => {
            "12341": the12341.toJson(),
        };
    }
    
    class The12341 {
        The2014 the2014;
    
        The12341({
            this.the2014,
        });
    
        factory The12341.fromJson(Map<String, dynamic> json) => new The12341(
            the2014: The2014.fromJson(json["2014"]),
        );
    
        Map<String, dynamic> toJson() => {
            "2014": the2014.toJson(),
        };
    }
    
    class The2014 {
        The11 the11;
    
        The2014({
            this.the11,
        });
    
        factory The2014.fromJson(Map<String, dynamic> json) => new The2014(
            the11: The11.fromJson(json["11"]),
        );
    
        Map<String, dynamic> toJson() => {
            "11": the11.toJson(),
        };
    }
    
    class The11 {
        The21 the21;
    
        The11({
            this.the21,
        });
    
        factory The11.fromJson(Map<String, dynamic> json) => new The11(
            the21: The21.fromJson(json["21"]),
        );
    
        Map<String, dynamic> toJson() => {
            "21": the21.toJson(),
        };
    }
    
    class The21 {
        String the21Class;
        String name;
    
        The21({
            this.the21Class,
            this.name,
        });
    
        factory The21.fromJson(Map<String, dynamic> json) => new The21(
            the21Class: json["class"],
            name: json["name"],
        );
    
        Map<String, dynamic> toJson() => {
            "class": the21Class,
            "name": name,
        };
    }
    

    【讨论】:

    • 嗨,我不认为它会工作。我提供的 json 是我数据库中 JSON 的一部分。我可以将 Map 的变量分配给 json Map 的键吗?假设一个变量 Map id = data.key 或类似的东西。虽然这是一个很好的参考
    猜你喜欢
    • 1970-01-01
    • 2020-11-29
    • 2016-08-19
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多