If you’re new to Flutter and trying to fetch and display data from a web server in your app, you may encounter the need to map a nested JSON object. Mapping nested JSON structures can be a bit challenging but fear not, as we’re here to guide you through the process.
Understanding the Nested JSON Structure
Let’s assume you have a JSON object retrieved from a web server with the following structure:
code{
"item_data1": {
"index": 0,
"age": 39,
"picture": "http://placehold.it/32x32",
"name": "Sospeter",
"email": "[email protected]"
},
"item_data2": {
"index": 1,
"age": 49,
"picture": "http://placehold.it/32x32",
"name": "Eric",
"email": "[email protected]"
}
}
It’s important to note that the keys “item_data1” and “item_data2” are dynamic and cannot be predetermined in code.
Fetching and Parsing the JSON Data
To fetch and parse the JSON data in your Flutter app, you can use the http package and the built-in JSON decoding capabilities of Dart. Here’s an example of how you can achieve this:
codeimport 'package:http/http.dart' as http;
import 'dart:convert';
Future<List<User>> _getUsers() async {
var url = "http://www.json-generator.com/api/json/get/bUAhSFmhNK?indent=2";
var data = await http.get(url);
var jsonData = json.decode(data.body) as Map<String, dynamic>;
List<User> users = [];
jsonData.forEach((key, value) {
User user = User(
index: value["index"],
age: value["age"],
name: value["name"],
email: value["email"],
picture: value["picture"],
);
users.add(user);
});
return users;
}
In this example, we fetch the JSON data from the provided URL using the http.get method. Then, we decode the JSON data into a Map<String, dynamic> using json.decode. Finally, we iterate over the key-value pairs in the JSON data and create User objects with the necessary properties.
Creating the User Model
To represent the user data, you can create a User model class. Here’s an example of how you can define the User model:
codeclass User {
final int index;
final int age;
final String name;
final String email;
final String picture;
User({
required this.index,
required this.age,
required this.name,
required this.email,
required this.picture,
});
}
The User class has properties for the user’s index, age, name, email, and picture. Make sure to include the required annotations to enforce the presence of these properties.
Accessing Nested Values
To access the nested values in the JSON object, we use the forEach method on the jsonData map. This allows us to iterate over each key-value pair and extract the necessary values. In the example above, we access the values using the value variable and assign them to the corresponding properties of the User object.
Displaying the User Data
Once you have the list of User objects, you can display the data in a ListView or any other desired widget in your Flutter app. Use the users list obtained from the _getUsers method and map it to the appropriate UI elements.
codeListView.builder(
itemCount: users.length,
itemBuilder: (context, index) {
User user = users[index];
return ListTile(
leading: Image.network(user.picture),
title: Text(user.name),
subtitle: Text(user.email),
trailing: Text("Age: ${user.age}"),
);
},
)
In this example, we use the ListView.builder widget to dynamically build a list of ListTile widgets based on the users list. Each ListTile displays the user’s picture, name, email, and age.
Conclusion
Mapping a nested JSON object in Flutter can be accomplished by fetching the JSON data, decoding it, and extracting the necessary values. By creating a model class and utilizing Dart’s JSON decoding capabilities, you can efficiently handle and display data in your Flutter app.
Remember, understanding the structure of the nested JSON object is crucial for extracting the correct values. Use the provided code examples as a starting point and adapt them to fit your specific use case.
Now you’re equipped with the knowledge to map nested JSON objects in Flutter. Go ahead and enhance your app’s data handling capabilities with confidence!

