【问题标题】:Flutter: How to convert a string to a valid JSON format in dart?Flutter:如何在 dart 中将字符串转换为有效的 JSON 格式?
【发布时间】: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"}]}]

我在这里做错了什么?

【问题讨论】:

    标签: json flutter dart


    【解决方案1】:

    你显然是在找错树了。 API 正在向您提供损坏的数据。它有缺陷。有问题。

    您联系 API 的制造商并告诉他们他们的产品有缺陷。然后你问他们打算什么时候修复它。

    如果您购买的汽车不像您订购的那样是绿色的,那么您可以返回经销商处投诉。你不会开始尝试把房子里的所有绿色钢笔、蜡笔和喷雾罐都弄到手,然后试着用翅膀来装饰它。

    有一个错误。报告它。你无法修复它,这不是你的代码。


    也就是说,您从 API 获得的“json”(实际上不是有效的 json)字符串不仅在这方面被破坏了,而且在其他一些方面也被破坏了。如果可能的话,我强烈建议考虑与不同的 API 供应商合作,这似乎很业余。

    【讨论】:

      猜你喜欢
      • 2022-12-19
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2019-04-01
      相关资源
      最近更新 更多