嵌套 json 的 Flutter 模型
Flutter model for nested json
我正在创建一个用于数据可视化的 flutter 应用程序。
将有 3 页:
- 筛选条件的筛选页,
- 用于可视化搜索结果的列表页面,
- 详细信息页面。
我会收到这样的json:
data.json
[
{
"name": "Jhon",
"surname": "Walker",
"details": "{\"work\":{\"salary\":\"116\",\"company\":\"evolution\",\"image\":\"http://image.jpg\"},\"address\":{\"street\":\"grand station\",\"city\":\"salt lake\"}}"
},
{
"name": "Alan",
"surname": "Turing",
"details": "{\"work\":{\"salary\":\"116\",\"company\":\"evolution\",\"image\":\"http://image.jpg\"},\"address\":{\"street\":\"grand station\",\"city\":\"salt lake\"}}"
}
]
这可能是一个很长的列表。
我已经post在这里提出了一个问题,关于我的这个应用程序的代码不起作用,这里是讨论
所以现在我要问一个不同的问题。哪个是这个 json 结构的最佳模型?
我需要直接访问详细信息对象中的所有字段。我想有能力直接拿到现场工资或公司。
我需要访问包含 url 的图像字段,以便在应用程序中显示图像。
在链接 post 中,我使用序列化和 built_value 生成了一个模型。
它在代码中不起作用,我仍然收到错误:
type String is not a subtype of type 'Map<String, dynamic>' in type cast
我在网上找到的解决方案似乎都没有用。
我创建了另一个没有嵌套对象的模型,我是这样制作的:
model.dart
class User {
String name;
String surname;
String details;
User({
this.name,
this.surname,
this.details,
});
factory User.fromJson(Map<String, dynamic> json) => User(
name: json["name"],
surname: json["surname"],
details: json["details"],
);
Map<String, dynamic> toJson() => {
"name": name,
"surname": surname,
"details": details,
};
}
使用此模型,我可以在 ListView 上显示数据,但详细信息字段是一个唯一的大字符串,我不知道如何访问详细信息对象中的字段。
我只能考虑正则表达式,但这听起来有点棘手,为什么当我有 JSON?
时我应该使用正则表达式
哪种型号最适合这个 json?我应该改变路径吗?
您对更好的数据模型有什么建议,或者从我链接的讨论中正确使用数据模型的解决方案吗?
我不是在问同样的问题,我只是想找到使用标准 json.
访问 deatils 字段的正确解决方案
谢谢!
尝试对您的 JSON 文件进行编码:
final data = jsonEncode(file);
final user = User.fromJson(data);
Flutter 文档包含 this 页面上 JSON encode/decode 操作的一些有用示例。
请参考此 link 获取适合您 json 的模型。
添加您的json、select您的语言,您就可以获得您的模型。
这是我目前使用的模型的解决方案:
model.dart
import 'dart:convert';
List<User> userFromJson(String str) =>
List<User>.from(json.decode(str).map((x) => User.fromJson(x)));
String userToJson(List<User> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class User {
User({
this.name,
this.surname,
this.areaName,
this.details,
});
String name;
String surname;
String areaName;
String details;
factory User.fromJson(Map<String, dynamic> json) => User(
name: json["name"],
surname: json["surname"],
areaName: json["areaName"],
details: json["details"],
);
Map<String, dynamic> toJson() => {
"name": name,
"surname": surname,
"areaName": areaName,
"details": details,
};
}
Details DetailsFromJson(String str) => Details.fromJson(json.decode(str));
String DetailsToJson(Details data) => json.encode(data.toJson());
class Details {
Details({
this.work,
this.address,
});
Work work;
Address address;
factory Details.fromJson(Map<String, dynamic> json) => Details(
work: Work.fromJson(json["work"]),
address: Address.fromJson(json["address"]),
);
Map<String, dynamic> toJson() => {
"work": work.toJson(),
"address": address.toJson(),
};
}
class Address {
Address({
this.street,
this.city,
});
String street;
String city;
factory Address.fromJson(Map<String, dynamic> json) => Address(
street: json["street"],
city: json["city"],
);
Map<String, dynamic> toJson() => {
"street": street,
"city": city,
};
}
class Work {
Work({
this.salary,
this.company,
});
String salary;
String company;
factory Work.fromJson(Map<String, dynamic> json) => Work(
salary: json["salary"],
company: json["company"],
);
Map<String, dynamic> toJson() => {
"salary": salary,
"company": company,
};
}
感谢您的帮助!
我正在创建一个用于数据可视化的 flutter 应用程序。 将有 3 页:
- 筛选条件的筛选页,
- 用于可视化搜索结果的列表页面,
- 详细信息页面。
我会收到这样的json:
data.json
[
{
"name": "Jhon",
"surname": "Walker",
"details": "{\"work\":{\"salary\":\"116\",\"company\":\"evolution\",\"image\":\"http://image.jpg\"},\"address\":{\"street\":\"grand station\",\"city\":\"salt lake\"}}"
},
{
"name": "Alan",
"surname": "Turing",
"details": "{\"work\":{\"salary\":\"116\",\"company\":\"evolution\",\"image\":\"http://image.jpg\"},\"address\":{\"street\":\"grand station\",\"city\":\"salt lake\"}}"
}
]
这可能是一个很长的列表。
我已经post在这里提出了一个问题,关于我的这个应用程序的代码不起作用,这里是讨论
所以现在我要问一个不同的问题。哪个是这个 json 结构的最佳模型? 我需要直接访问详细信息对象中的所有字段。我想有能力直接拿到现场工资或公司。 我需要访问包含 url 的图像字段,以便在应用程序中显示图像。 在链接 post 中,我使用序列化和 built_value 生成了一个模型。 它在代码中不起作用,我仍然收到错误:
type String is not a subtype of type 'Map<String, dynamic>' in type cast
我在网上找到的解决方案似乎都没有用。
我创建了另一个没有嵌套对象的模型,我是这样制作的: model.dart
class User {
String name;
String surname;
String details;
User({
this.name,
this.surname,
this.details,
});
factory User.fromJson(Map<String, dynamic> json) => User(
name: json["name"],
surname: json["surname"],
details: json["details"],
);
Map<String, dynamic> toJson() => {
"name": name,
"surname": surname,
"details": details,
};
}
使用此模型,我可以在 ListView 上显示数据,但详细信息字段是一个唯一的大字符串,我不知道如何访问详细信息对象中的字段。 我只能考虑正则表达式,但这听起来有点棘手,为什么当我有 JSON?
时我应该使用正则表达式哪种型号最适合这个 json?我应该改变路径吗? 您对更好的数据模型有什么建议,或者从我链接的讨论中正确使用数据模型的解决方案吗? 我不是在问同样的问题,我只是想找到使用标准 json.
访问 deatils 字段的正确解决方案谢谢!
尝试对您的 JSON 文件进行编码:
final data = jsonEncode(file);
final user = User.fromJson(data);
Flutter 文档包含 this 页面上 JSON encode/decode 操作的一些有用示例。
请参考此 link 获取适合您 json 的模型。
添加您的json、select您的语言,您就可以获得您的模型。
这是我目前使用的模型的解决方案:
model.dart
import 'dart:convert';
List<User> userFromJson(String str) =>
List<User>.from(json.decode(str).map((x) => User.fromJson(x)));
String userToJson(List<User> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class User {
User({
this.name,
this.surname,
this.areaName,
this.details,
});
String name;
String surname;
String areaName;
String details;
factory User.fromJson(Map<String, dynamic> json) => User(
name: json["name"],
surname: json["surname"],
areaName: json["areaName"],
details: json["details"],
);
Map<String, dynamic> toJson() => {
"name": name,
"surname": surname,
"areaName": areaName,
"details": details,
};
}
Details DetailsFromJson(String str) => Details.fromJson(json.decode(str));
String DetailsToJson(Details data) => json.encode(data.toJson());
class Details {
Details({
this.work,
this.address,
});
Work work;
Address address;
factory Details.fromJson(Map<String, dynamic> json) => Details(
work: Work.fromJson(json["work"]),
address: Address.fromJson(json["address"]),
);
Map<String, dynamic> toJson() => {
"work": work.toJson(),
"address": address.toJson(),
};
}
class Address {
Address({
this.street,
this.city,
});
String street;
String city;
factory Address.fromJson(Map<String, dynamic> json) => Address(
street: json["street"],
city: json["city"],
);
Map<String, dynamic> toJson() => {
"street": street,
"city": city,
};
}
class Work {
Work({
this.salary,
this.company,
});
String salary;
String company;
factory Work.fromJson(Map<String, dynamic> json) => Work(
salary: json["salary"],
company: json["company"],
);
Map<String, dynamic> toJson() => {
"salary": salary,
"company": company,
};
}
感谢您的帮助!