【发布时间】:2022-01-05 07:19:46
【问题描述】:
这是我从 API 获取的字符串。
[{name: Harry, phoneNumber: 9876543210, userPost: [{_id: 618b625715a5af04707ef687, productGroup: Furniture, productName: Table, number: 47, fromDate: 01-01-2021, toDate: 31-12-2021}] }, {name: Peter, phoneNumber: 9999999999, userPost: [{_id: 618cc96afcaa83282844ff99, productGroup: Furniture, productName: Chair, 数量: 60, fromDate: 01-01-2021, toDate: 31-12-2021}]}]
后来发现这个字符串应该是这种格式
[{“name”:“Harry”,“phoneNumber”:“9876543210”,“userPost”:[{“_id”:“618b625715a5af04707ef687”,“productGroup”:“家具”,“productName”:“桌子” ,“数量”:“47”,“fromDate”:“01-01-2021”,“toDate”:“31-12-2021”}]},{“name”:“Peter”,“phoneNumber”:“ 9999999999”,“userPost”:[{“_id”:“618cc96afcaa83282844ff99”,“productGroup”:“家具”,“productName”:“椅子”,“数量”:“60”,“fromDate”:“01-01- 2021", "toDate": "31-12-2021"}]}]
让 json.decode() 正常运行。
我无法将此字符串转换为有效的 JSON 格式。这是我的代码 =>
body= val.data['rslt'].toString();
setUser(body);
Future<List<User>> setUser(String jsonString) async{
List<User> list;
print('encoding');
print(jsonString);
String encodedStr= json.encode(jsonString);
print(encodedStr);
List<dynamic> data = json.decode(encodedStr) as List<dynamic>;
print(data);
list = data.map<User>((json) => User.fromJson(json)).toList();
listDis=list;
print("List Size: ${list.length}");
return list;
}
class User {
final String name;
final String phoneNumber;
final PostOffer postOffer;
const User({
required this.name,
required this.phoneNumber,
required this.postOffer
});
factory User.fromJson(Map<String, dynamic> json){
return User(
name: json['name'].toString(),
phoneNumber: json['phoneNumber'].toString(),
postOffer: PostOffer.fromJson(json)
);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['phoneNumber'] = this.phoneNumber;
if (this.postOffer != null) {
data['postOffer'] = this.postOffer.toJson();
}
return data;
}
}
class PostOffer {
final String? productGroup;
final String? productName;
final String? quantity;
final String? fromDate;
final String? toDate;
PostOffer({required this.productGroup, required this.productName, required this.quantity, required this.fromDate, required this.toDate});
factory PostOffer.fromJson(Map<String, dynamic> parsedJson){
return PostOffer(
productGroup:parsedJson['productGroup'] as String?,
productName:parsedJson['productName'] as String?,
quantity:parsedJson['quantity'] as String?,
fromDate:parsedJson['fromDate'] as String?,
toDate:parsedJson['toDate'] as String?
);
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>();
data['productGroup']= this.productGroup;
data['productName']= this.productName;
data['quantity']= this.quantity;
data['fromDate']= this.fromDate;
data['toDate']= this.toDate;
return data;
}
}
当我使用 json.encode() 函数时,它会转换这个字符串
[{name: Harry, phoneNumber: 9876543210, userPost: [{_id: 618b625715a5af04707ef687, productGroup: Furniture, productName: Table, number: 47, fromDate: 01-01-2021, toDate: 31-12-2021}] }, {name: Peter, phoneNumber: 9999999999, userPost: [{_id: 618cc96afcaa83282844ff99, productGroup: Furniture, productName: Chair, 数量: 60, fromDate: 01-01-2021, toDate: 31-12-2021}]}]
到这里
"[{name: Harry, phoneNumber: 9876543210, userPost: [{_id: 618b625715a5af04707ef687, productGroup: Furniture, productName: Table, number: 47, fromDate: 01-01-2021, toDate: 31-12-2021} ]},{name:Peter,phoneNumber:9999999999,userPost:[{_id:618cc96afcaa83282844ff99,productGroup:Furniture,productName:椅子,数量:60,fromDate:01-01-2021,toDate:31-12-2021}]} ]"
改为
[{“name”:“Harry”,“phoneNumber”:“9876543210”,“userPost”:[{“_id”:“618b625715a5af04707ef687”,“productGroup”:“家具”,“productName”:“桌子” ,“数量”:“47”,“fromDate”:“01-01-2021”,“toDate”:“31-12-2021”}]},{“name”:“Peter”,“phoneNumber”:“ 9999999999”,“userPost”:[{“_id”:“618cc96afcaa83282844ff99”,“productGroup”:“家具”,“productName”:“椅子”,“数量”:“60”,“fromDate”:“01-01- 2021", "toDate": "31-12-2021"}]}]
我在这里做错了什么?
【问题讨论】: