【发布时间】:2021-01-21 20:10:17
【问题描述】:
我曾在 Flutter/Dart 应用程序中对 JSON 进行解码/编码。解码工作得很好,但是在将我的对象编码为 JSON 时我遇到了一个非常讨厌的问题。
这些是嵌套对象。他们每个人都有自己的 toJson 和 fromJson 方法,以确保 jsonEncode 和 Decode 工作。我工作的一个小sn-p:
class App {
factory App.fromJson(Map<String, dynamic> json) => App(
langPref: json["langPref"],
langFallb: json["langFallb"],
users: List.of(json["users"]).map((i) => i).toList(),
);
String langPref;
String langFallb;
List<User> users;
/// JSON-Export
Map<String, dynamic> toJson() => {
"langPref": langPref,
"langFallb": langFallb,
"users": jsonEncode(users),
};
}
和嵌套类:
class User {
int userid;
// actually there's more, including more nested objects
/// JSON-Import
factory User.fromJson(Map<String, dynamic> json) {
return User(
userid: int.parse(json["userid"]),
);
}
/// JSON-Export
Map<String, dynamic> toJson() {
return {
"userid": this.userid,
};
}
}
问题是:当我对顶级类“App”进行编码时,它正确地调用了嵌套类的 toJson() 方法。但是,对应的 JSON 应该是这样的:
{
"langPref":"de-DE",
"langFallb":"en-GB",
"users":
[
{
"userid": 1
// and so on
然而,它看起来像这样:
{
"langPref":"de-DE",
"langFallb":"en-GB",
"users":"[{\"userid\":1
// and so on
所以,jsonEncode 不知何故引入了额外的双引号,这在某种程度上甚至是有意义的。它产生一个字符串,并且在 JSON 中应该对一个字符串进行编码....但是我猜我只是做错了什么并且遗漏了一些明显的东西....我怎样才能告诉 jsonEncode 接受操作的结果,而不是将其编码为字符串?
有人可以帮帮我吗?
【问题讨论】: