【问题标题】:Flutter json array parsingFlutter json数组解析
【发布时间】:2020-06-26 00:44:51
【问题描述】:

我知道这是一个常见问题,但我没有找到任何解决方案,所以我在这里提出一个问题。

JSON格式如下,

[
  {
    "id": "127",
    "image": "https://www.website.com/imgFldr/app/app-bangalore3.jpg",
    "city": "Bangalore",
    "store_mobile": "+91-978XXXXXXX",
    "search_by": "Search one",
    "url": "image url",
    "store_address": "Address 1"
  },
  {
    "id": "128",
    "image": "https://www.website.com/imgFldr/app/app-bangalore2.jpg",
    "city": "Bangalore",
    "store_mobile": "+91-978XXXXXXX",
    "search_by": "Search 2",
    "url": "image url",
    "store_address": "Address 2"
  },
  {
    "id": "137",
    "image": "https://www.website.com/imgFldr/app/app-bangalore.jpg",
    "city": "Bangalore",
    "store_mobile": "+91-978XXXXXXX",
    "search_by": "Search 3",
    "url": "image url",
    "store_address": "Address 3"
  },
  {
    "id": "132",
    "image": "https://www.website.com/imgFldr/app/app-mumbai-2.jpg",
    "city": "Mumbai",
    "store_mobile": "+91-978XXXXXXX",
    "search_by": "Search 4",
    "url": "image url",
    "store_address": "Address 4"
  },
  {
    "id": "139",
    "image": "https://www.website.com/imgFldr/app/app-mumbai.jpg",
    "city": "Mumbai",
    "store_mobile": "+91-978XXXXXXX",
    "search_by": "Search 5",
    "url": "image url",
    "store_address": "Address 5"
  }
]

响应以数组的形式出现。 我确实喜欢这个,模型类

class Stores {
String id;
String image;
String city;
String storeMobile;
String searchBy;
String url;
String storeAddress;

Stores(
  {this.id,
  this.image,
  this.city,
  this.storeMobile,
  this.searchBy,
  this.url,
  this.storeAddress});

Stores.fromJson(Map<String, dynamic> json) {
id = json['id'];
image = json['image'];
city = json['city'];
storeMobile = json['store_mobile'];
searchBy = json['search_by'];
url = json['url'];
storeAddress = json['store_address'];
}

Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['image'] = this.image;
data['city'] = this.city;
data['store_mobile'] = this.storeMobile;
data['search_by'] = this.searchBy;
data['url'] = this.url;
data['store_address'] = this.storeAddress;
return data;
 }
}

在 main.dart 类中

List<Stores> storeList = new List();
Future<Null> getStoresData() async {
setState(() {
  loading = true;
});

final response = await http.get(Uri.encodeFull(APIs.url_getStoreData));
List<dynamic> list = jsonDecode(utf8.decode(response.bodyBytes));

Stores str = Stores.fromJson(list[0]);

storeList.add(str);
print("list Value : $list");
print("Store : $storeList");

setState(() {
  loading = false;
});
}

JSON 以单个字符串形式出现。我无法在 ListTiles 上使用它,因为

storeList[index]['city'],

当我尝试打印时('Size : $storeList.length');它只打印 =1

请帮忙,谢谢。

【问题讨论】:

    标签: android json parsing flutter


    【解决方案1】:

    使用 ListBuilder

    _StoreListAPI() async {
    final response = await http.get(
     APINAME,
    );
    if (response.statusCode == 200) {
      final result = json.decode(response.body);
      List<dynamic> list = result;
      print("response----$result");
      List<Stores> storelist= list.map((i) => Stores.fromJson(i)).toList();
      print("response--22--"+list_[0].toJson().toString());
      setState(() => {
        _storelist = storelist,
        isLoading  = false
      });
    
    } else {
      setState(() => {
        isLoading  = false
      });
    
    }  }
    

    小部件

     body:FutureBuilder<List<Stores>>(
                future: _storelist
                builder: (BuildContext context, AsyncSnapshot<List<Stores>> snapshot) {
                  if (snapshot.data !=null) {
                    return ListView.builder(
                      physics: BouncingScrollPhysics(),
                      itemCount: snapshot.data.length,
                      itemBuilder: (BuildContext context, int index) {
        return  ListTile()
        })}});
    

    【讨论】:

    • 我不明白你的意思->你破坏数组的对象的名称
    • 现在检查 当你首先有一个数组时它很简单,当 API 显示这样的结果时:"data": {[]} 现在当你收到一个对象数组时它很简单
    【解决方案2】:

    长度即将增加,因为您只向列表中添加了一项。
    你如何将整个列表转换成你的模型

    List<Stores> storeList = new List();
    Future<Null> getStoresData() async {
    setState(() {
    loading = true;
    });
    
    final response = await http.get(Uri.encodeFull(APIs.url_getStoreData));
    List<dynamic> list = jsonDecode(utf8.decode(response.bodyBytes));
    
    for(int i = 0 ; i<list.length;i++)
    storeList.add(Stores.fromJson(list[i]));
    
    print("list Value : $list");
    print("Store : $storeList");
    
    setState(() {
     loading = false;
    });
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-28
      • 1970-01-01
      • 2021-07-13
      • 2020-01-08
      • 2020-05-29
      • 2020-01-07
      • 2020-11-25
      • 2019-12-27
      • 2021-01-19
      相关资源
      最近更新 更多