【问题标题】:Cannot Access Data in Serialized JSON Object Flutter无法访问序列化 JSON 对象 Flutter 中的数据
【发布时间】:2020-02-05 08:53:05
【问题描述】:

我正在尝试将 JSON 数据序列化为手动创建的对象。每当我尝试访问数据时,我都会得到一个 null 但是,如果我打印序列化数据的长度,我会被告知我的数组中有 8 个项目。我目前在我的项目中使用 json_annotation: ^2.0.0 和 json_serializable: 作为依赖项。

这是我目前尝试过的代码:

我的对象:

class Restaurant {
  int id;
  String name;
  String address;
  String city;
  String restaurantPhoto;
  String state;
  double lat;
  double long;
  String rating;

  Restaurant({
    this.id,
    this.address,
    this.city,
    this.restaurantPhoto,
    this.lat,
    this.long,
    this.name,
    this.state,
    this.rating,
  });

  factory RestaurantPhoto.fromJSON(Map<String, dynamic> json){
     return Restaurant(
    id: json['id'] as int,
    name: json[‘restaurant_name'] as String,
    address: json['street_address'] as String,
    city: json['city'] as String,
    restaurantPhoto: json['restaurant_photo'] as String,
    state: json['state'] as String,
    lat: json['lat'] as double,
    long: json['lng'] as double,
    rating: json['rating'] as String,
  );
  }
}

这是我的方法:

  Future getRestaurants() async {
  var url = 'http://restaurant-8821.herokuapp.com/api/customer/restaurant/';

  http.get(url, headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  }).then((http.Response response) {
    // print(response.body);

    Map<String, dynamic> responseData = json.decode(response.body);

    Restaurant restaurant = Restaurant.fromJSON(responseData);
    print(responseData);
    print(restaurant.name);

    print(restaurant().length);

  });
}

从方法中将打印三个项目并打印 responseData:

{restaurant: [{id: 4, restaurant_name: The Oasis, phone: 123-123-1234, street_address: 456 Fake St, restaurant_logo: https://restaurant.s3.amazonaws.com/restaurant_logo/restaurantLogo_jXon4qm.jpg, restaurant_photo: https://restaurant.s3.amazonaws.com/restaurant_photo/farmas.jpg, city: New York, state: New York, zip_Code: 12345, lat: 40.0, lng: 40.0, latlng: (40.7770112244898, -74.2110798163265), opening_hours: [], ratings: 3.0}, 

餐厅名称出现空,restaurant.string.length 打印出 12。

【问题讨论】:

    标签: json serialization flutter dart


    【解决方案1】:

    我注意到你打错了反引号而不是引号

     name: json[‘restaurant_name'] as String,
    

    试试这个

    name: json['restaurant_name'] as String,
    

    【讨论】:

    • 我进行了更改,但仍然无法访问数据。
    • 是的。我打印出响应正文没问题。然后我尝试在对对象的 api 调用中访问解码 json 数据:Restaurant restaurant = Restaurant.fromJSON(responseData)。我不知道如何将 responseData 放入对象并使用它。它给了我一个空
    猜你喜欢
    • 2020-05-24
    • 2022-01-14
    • 2017-11-03
    • 2017-11-19
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    相关资源
    最近更新 更多