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