如何在 Dart 中生成自定义 json 数据?

How custom json data can be generated in Dart?

我想从此模型生成自定义 json:

class Book {
  List<Route> routes;
  double distance;
  int rateId;
  List<int> optionsIds;
  String comment;
  int regionId;
}

class Route {
  double lat;
  double lng;
  int order;
  String address;
}

var book = Book();
book.routes = [Route(lat: 12, lng: 12, order: 0,address: 'address1'), Route(lat: 12, lng: 12, order: 1,address: 'address2')]; 
book.distance = 10.3;
book.rateId = 0;
book.optionsIds = [1,2];
book.comment = 'book comment';
book.regionId = 1;

我需要这个json:

{
  "routes[0][address]": "Aviasozlar, 24",
  "routes[0][lat]": 12,
  "routes[0][lng]": 12,
  "routes[0][order]": 0,
  
  "routes[1][address]": "Mustaqillik maydoni",
  "routes[1][lat]": 12,
  "routes[1][lng]": 12,
  "routes[1][order]": 1,
  
  "distance": 12,
  "rate_id": 1,
  "option_ids[]": 1,
  "option_ids[]": 2,
  "comment": "komment 1",
  "region_id": 1,
}

忽略此文本:看起来您的 post 主要是代码;请添加更多详细信息。

忽略此文本:看起来您的 post 主要是代码;请添加更多详细信息。

只需为您的 Book class 创建一个方法 toJson

class Book {
  List<Route> routes;
  double distance;
  int rateId;
  List<int> optionsIds;
  String comment;
  int regionId;

  Map<String, dynamic> toJson() {
    Map<String, dynamic> json = {};

    for (int i = 0; i < routes.length; i++) {
      json['routes[$i][address]'] = routes[i].address;
      json['routes[$i][lat]'] = routes[i].lat;
      json['routes[$i][lng]'] = routes[i].lng;
      json['routes[$i][order]'] = routes[i].order;
    }
    
    json['distance'] = distance;
    json['rate_id'] = rateId;
    
    for (int i = 0; i < optionsIds.length; i++) {
      json['option_ids[$i]'] = optionsIds[i];
    }
    
    json['comment'] = comment;
    json['region_id'] = regionId;
    
    return json;
  }
}

然后只需将 jsonEncode 应用于返回的 Map<String, dynamic>

print(jsonEncode(book.toJson()));

格式化结果:

{
   "routes[0][address]":"address1",
   "routes[0][lat]":12,
   "routes[0][lng]":12,
   "routes[0][order]":0,
   "routes[1][address]":"address2",
   "routes[1][lat]":12,
   "routes[1][lng]":12,
   "routes[1][order]":1,
   "distance":10.3,
   "rate_id":0,
   "option_ids[0]":1,
   "option_ids[1]":2,
   "comment":"book comment",
   "region_id":1
}

Try full example on DartPad