5

How would I parse a nested array of objects such as the one below.

{
    "status": "success",
    "code": 200,
    "message": "The request was successful",
    "data": [
        {
            "name": "Abu Dhabi",
            "id": 4139,
            "parent": 5153,
            "type": "city",
            "imageURL": ""

        },
        {
            "name": "Croatia",
            "id": 5037,
            "parent": 6886,
            "type": "country",
            "imageURL": ""

        },
     ]
}

I am currently making an API call which returns data in the format as shown above.

My api call is as follows:

  Future<Location> getLocations() async {
    final response =
        await http.get('$endpoint/locations', headers: authenticatedHeader);

    if (response.statusCode == 200) {
      final responseJson = json.decode(response.body);

      // If server returns an OK response, parse the JSON.

      return Location.fromJson(responseJson);
    } else {
      // If that response was not OK, throw an error.
      throw Exception('Failed to load post');
    }
  }

I then have a location class as below:

class Location {
  String name;
  int id;
  int parent;
  String type;
  String imageURL;

  Location(
      {this.name, this.id, this.parent, this.type, this.imageURL});

  factory Location.fromJson(Map<String, dynamic> json) =>
      _locationFromJson(json);
}

Location _locationFromJson(Map<String, dynamic> json) {
  return Location(
    name: json['name'] as String,
    id: json['id'] as int,
    parent: json['parent'] as int,
    type: json['type'] as String,
    imageURL: json['imageURL'] as String
  );
}

I am hoping to be able to retrieve all the locations above using a listview builder and create a listtile for each location.

How can I parse the JSON correctly?

1
  • return Location.fromJson(responseJson.data); Commented Aug 15, 2019 at 11:04

1 Answer 1

9

Follor this url you will more idea about json parse. https://medium.com/flutter-community/parsing-complex-json-in-flutter-747c46655f51

Here is the code that what exectly you looking, i have use with static json in assets so you have to replace with your resonse.

    import 'dart:async' show Future;
    import 'package:flutter/services.dart' show rootBundle;
    import 'dart:convert';
    import 'package:flutter_json/model/location_model.dart';

    Future<String> _loadlocationAsset() async {
    return await rootBundle.loadString('assets/location.json');
    }

    Future loadLocation() async {
    String jsonLocation = await _loadlocationAsset();
    final jsonResponse = json.decode(jsonLocation);
    LocationData location = new LocationData.fromJson(jsonResponse);
    print(location.data[0].name);
    }

Data model

     class LocationData {
        final int code;
        final String status;
        final String message;
        final List<Data> data;

        LocationData({this.code, this.status,this.message, this.data});

        factory LocationData.fromJson(Map<String, dynamic> parsedJson){

            var list = parsedJson['data'] as List;
            print(list.runtimeType);
            List<Data> dataList = list.map((i) => Data.fromJson(i)).toList();


            return LocationData(
                code: parsedJson['code'],
                status: parsedJson['status'],
                message: parsedJson['message'],
                data: dataList
            );
        }
        }

        class Data {
        final int id;
        final int parent;
        final String name;
        final String type;
        final String imageURL;

        Data({this.id, this.parent,this.name,this.type,this.imageURL});

        factory Data.fromJson(Map<String, dynamic> parsedJson){
            return Data(
                id:parsedJson['id'],
                parent:parsedJson['parent'],
                name:parsedJson['name'],
                type:parsedJson['type'],
                imageURL:parsedJson['imageURL']
            );
        }
        }
Sign up to request clarification or add additional context in comments.

1 Comment

use built value types for easy JSON serialization of complex objects.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.