如何从dart中的Json文件中读取对象并映射到变量?

如何从dart中的Json文件中读取对象并映射到变量?,json,flutter,dart,Json,Flutter,Dart,我有一个JSON文件,其中包含不同且唯一的对象,如Employee1、employee2等等。现在我想使用惟一的对象读取JSON文件,然后将对象内容映射到一个变量,并在我的项目中使用它 JSON文件如下所示: [ { "employee1": { "firstName": "Lokesh", "lastName": "Gupta&quo

我有一个JSON文件,其中包含不同且唯一的对象,如Employee1、employee2等等。现在我想使用惟一的对象读取JSON文件,然后将对象内容映射到一个变量,并在我的项目中使用它

JSON文件如下所示:

[
    {
        "employee1": {
            "firstName": "Lokesh",
            "lastName": "Gupta",
            "website": "howtodoinjava.com"
        }
    },
    {
        "employee2": {
            "firstName": "Brian",
            "lastName": "Schultz",
            "website": "example.com"
        }
    }
]

将上述json列表馈送到
json.decode()

var dJson=json.decode(列表);
//这使得dJson成为一个列表
//访问第一个结果
var first=dJson[0];
//这将为您提供一个映射,因为json.decode维护给定json的结构
var employee1=第一个[“employee1”];
//我再给你一张地图
var firstName=employee1[“firstName”];
//我会告诉你名字的
印刷品(名字)//洛克斯

首先,尝试使用您获得的JSON创建一个模型。对于示例,请提供模型,如下所示

class EmployeeModel {
  Employee1 employee1;

  EmployeeModel({this.employee1});

  EmployeeModel.fromJson(Map<String, dynamic> json) {
    employee1 = json['employee1'] != null
        ? new Employee1.fromJson(json['employee1'])
        : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.employee1 != null) {
      data['employee1'] = this.employee1.toJson();
    }
    return data;
  }
}

class Employee1 {
  String firstName;
  String lastName;
  String website;

  Employee1({this.firstName, this.lastName, this.website});

  Employee1.fromJson(Map<String, dynamic> json) {
    firstName = json['firstName'];
    lastName = json['lastName'];
    website = json['website'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['firstName'] = this.firstName;
    data['lastName'] = this.lastName;
    data['website'] = this.website;
    return data;
  }
}

要访问模型中的值,请查看我创建的示例: 以下是您提供的json

[
    {
        "employee1": {
            "firstName": "Lokesh",
            "lastName": "Gupta",
            "website": "howtodoinjava.com"
        }
    },
    {
        "employee2": {
            "firstName": "Brian",
            "lastName": "Schultz",
            "website": "example.com"
        }
    }
]

这就是解决方案:

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 Employee {
  String firstName;
  String lastName;
  String website;

  Employee({this.firstName, this.lastName, this.website});
}

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

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

  List<Employee> employeeList = List();

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

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

    var jsonData = json.decode(data);

    jsonData.forEach((item) {
      item.forEach((key, value) {
        employeeList.add(Employee(
            firstName: value['firstName'],
            lastName: value['lastName'],
            website: value['website']));
      });
    });

    print(employeeList.length);

    employeeList.forEach((item) {
      print(item.firstName);
      print(item.lastName);
      print(item.website);
    });
  }

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

导入'dart:convert';
进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回资料app(主页:HomePage());
}
}
班级员工{
字符串名;
字符串lastName;
字符串网站;
员工({this.firstName,this.lastName,this.website});
}
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
bool_isLoading=false;
List employeeList=List();
@凌驾
void initState(){
super.initState();
getData();
}
getData()异步{
字符串数据=
等待DefaultAssetBundle.of(context.loadString(“json/parse.json”);
var jsonData=json.decode(数据);
jsonData.forEach((项目){
item.forEach((键,值){
employeeList.add(员工)(
firstName:value['firstName'],
lastName:value['lastName'],
网站:value['website']);
});
});
打印(employeeList.length);
员工列表。forEach((项目){
打印(项目名称);
打印(项目名称);
印刷品(项目.网站);
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(正文:文本(“”));
}
}

让我知道它是否有效。

那么为了访问employee2,我必须增加
dJson[1]
,然后按照您为employee1所做的相同步骤进行操作,对吗?正如您在代码中解释的那样,工作正常。我真的很抱歉这么晚才回复。有没有办法在同一个JSON文件中搜索
employee1
,然后将其映射到一个变量完成了工作,修改了
JSON
语法以匹配
map
语法,并解决了我的问题谢谢你的帮助
[
    {
        "employee1": {
            "firstName": "Lokesh",
            "lastName": "Gupta",
            "website": "howtodoinjava.com"
        }
    },
    {
        "employee2": {
            "firstName": "Brian",
            "lastName": "Schultz",
            "website": "example.com"
        }
    }
]

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 Employee {
  String firstName;
  String lastName;
  String website;

  Employee({this.firstName, this.lastName, this.website});
}

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

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

  List<Employee> employeeList = List();

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

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

    var jsonData = json.decode(data);

    jsonData.forEach((item) {
      item.forEach((key, value) {
        employeeList.add(Employee(
            firstName: value['firstName'],
            lastName: value['lastName'],
            website: value['website']));
      });
    });

    print(employeeList.length);

    employeeList.forEach((item) {
      print(item.firstName);
      print(item.lastName);
      print(item.website);
    });
  }

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