Dart / Flutter: синтаксический анализ объекта Json

#json #flutter #dart

#json #флаттер #dart

Вопрос:

Я пытаюсь проанализировать некоторые уникальные данные JSON в моем приложении Flutter.

 {
    "NewDataSet": {
        "Route": [
            {
                "RouteID": "1",
                "RouteNum": "20",
                "Description": "NORTH DAKOTA "
                
            },
            {
                "RouteID": "11",
                "RouteNum": "25",
                "Description": "East SD "
            }
        ]
    }
}
 

Я не уверен, как проанализировать это с помощью двух объектов.

Ответ №1:

Вы можете использовать json2dart для преобразования вашего json в классы dart, даже сложные и вложенные данные json будут работать идеально.

Вот версия класса dart для ваших данных json:

 class Autogenerated {
  NewDataSet newDataSet;

  Autogenerated({this.newDataSet});

  Autogenerated.fromJson(Map<String, dynamic> json) {
    newDataSet = json['NewDataSet'] != null
        ? new NewDataSet.fromJson(json['NewDataSet'])
        : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.newDataSet != null) {
      data['NewDataSet'] = this.newDataSet.toJson();
    }
    return data;
  }
}

class NewDataSet {
  List<Route> route;

  NewDataSet({this.route});

  NewDataSet.fromJson(Map<String, dynamic> json) {
    if (json['Route'] != null) {
      route = new List<Route>();
      json['Route'].forEach((v) {
        route.add(new Route.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.route != null) {
      data['Route'] = this.route.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Route {
  String routeID;
  String routeNum;
  String description;

  Route({this.routeID, this.routeNum, this.description});

  Route.fromJson(Map<String, dynamic> json) {
    routeID = json['RouteID'];
    routeNum = json['RouteNum'];
    description = json['Description'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['RouteID'] = this.routeID;
    data['RouteNum'] = this.routeNum;
    data['Description'] = this.description;
    return data;
  }
}

 

Ответ №2:

Вы можете заключить квадратные скобки в цепочку и просто ссылаться на соответствующие имена, если вы знаете, какие данные вы получаете.

 import 'dart:convert';

void main() {
  decodeJSON();
}

void decodeJSON() async {
  String data =
        '{"NewDataSet": {"Route": [{"RouteID": "1","RouteNum": "20","Description": "NORTH DAKOTA "},{"RouteID": "11","RouteNum": "25","Description": "East SD "}]}}';

    try {
      dynamic decoded = await jsonDecode(data);
      dynamic newDataSet = await decoded['NewDataSet'];
      dynamic routes = await decoded['NewDataSet']['Route'];

      print(newDataSet);
      print(routes);
    } catch (e) {
      print(e);
    }
}

 

Комментарии:

1. как бы мне реализовать это в моей модели?

2. Вы можете добавить его в качестве метода, возвращать данные при успешном выполнении и null при ошибке.

3. Это помогло. Начинаю разбираться в этом сейчас. Спасибо.