首页 > 解决方案 > Flutter - 使用父集解析 Json

问题描述

我可以解析我的代码 json 文件,如下所示。它工作正常:

[
  {
    "albumId": 1,
    "id": 1,
    "title": "Accusamus beatae ad facilis cum similique qui sunt",
    "url": "https://via.placeholder.com/600/92c952",
    "thumbnailUrl": "https://via.placeholder.com/150/92c952",
      "publishDate": "2021-03-12"
  },
  {
    "albumId": 1,
    "id": 2,
    "title": "Reprehenderit est deserunt velit ipsam",
    "url": "https://via.placeholder.com/600/771796",
    "thumbnailUrl": "https://via.placeholder.com/150/771796",
      "publishDate": "2021-03-12"
  }
]

但我需要更新我的 json 文件才能显示来自特定父级的数据。在此示例中:位置 1 或位置 2。

{
  "position1":[
  {
    "albumId": 1,
    "id": 1,
    "title": "Accusamus beatae ad facilis cum similique qui sunt",
    "url": "https://via.placeholder.com/600/92c952",
    "thumbnailUrl": "https://via.placeholder.com/150/92c952",
      "publishDate": "2021-03-12"
  },
  {
    "albumId": 1,
    "id": 2,
    "title": "Reprehenderit est deserunt velit ipsam",
    "url": "https://via.placeholder.com/600/771796",
    "thumbnailUrl": "https://via.placeholder.com/150/771796",
      "publishDate": "2021-03-12"
  }
],
  "position2":[
  {
    "albumId": 1,
    "id": 1,
    "title": "Accusamus beatae ad facilis cum similique qui sunt",
    "url": "https://via.placeholder.com/600/92c952",
    "thumbnailUrl": "https://via.placeholder.com/150/92c952",
      "publishDate": "2021-03-12"
  },
  {
    "albumId": 1,
    "id": 2,
    "title": "Reprehenderit est deserunt velit ipsam",
    "url": "https://via.placeholder.com/600/771796",
    "thumbnailUrl": "https://via.placeholder.com/150/771796",
      "publishDate": "2021-03-12"
  }
]
}

我的代码如下所示。我应该怎么做才能仅列出来自 ex: position1 的子项。

Future<List<Photo>> fetchPhotos(http.Client client) async {
  final response = await client
      .get(Uri.parse('https://jsonplaceholder.typicode.com/photos'));
     
  return compute(parsePhotos, response.body);
}

// A function that converts a response body into a List<Photo>.
List<Photo> parsePhotos(String responseBody) {
  final parsed = jsonDecode(responseBody).cast<Map<String, dynamic>>();

  return parsed.map<Photo>((json) => Photo.fromJson(json)).toList();
}

body: FutureBuilder<List<Photo>>(
    future: fetchPhotos(http.Client()),
    builder: (context, snapshot) {
      if (snapshot.hasError) print(snapshot.error);

      return snapshot.hasData
          ? PhotosList(photos: snapshot.data!)
          : Center(child: CircularProgressIndicator());
    },
  ),

标签: jsonlistvisual-studioflutterdart

解决方案


推荐阅读