如何在Flutter中解析graphql响应

时间:2019-09-11 12:29:07

标签: json parsing flutter dart graphql

我正在尝试在Flutter应用中解析来自neo4j-graphql后端的graphql响应。我正在使用flutter_graphql插件对后端进行查询。但是,当我尝试解析响应(JSON)时,我得到的是“ LinkHashMap不是Users Map的子类型。”

我尝试修改我的序列化类,该类将解析响应但不可用。以下是neo4j graphql的JSON响应

addClient($event: ClientAddModel) {
this.service.addClient($event).then(rsp => {
  console.log(rsp);
  this.getClients();

}, err => {
  this.errors = err;  //this erros is an array of any 
  console.log(this.errors); //here this errors is OK 
});
}

下面是代表以上响应的类


 /*I HAVE EDITED THE JSON RESPONSE. THE FULL JSON RESPONSE FROM THE SERVER IS AS BELOW*/
{
  "data": {
    "User": [
      {
        "userId": 1,
        "city": "NewYork",
        "country": "User",
        "captionType": "User",
        "state": "New York",
        "firstName": "example2",
        "lastname": "example",
        "email": "example2@gmail.com"
      }
    ]
  },
  "extensions": {
    "type": "READ_ONLY"
  }
}

我希望信息可以通过Users类进行解析,并通过listViewWidget显示。但是我得到的是“ LinkHashMap不是用户映射的子类型。”

1 个答案:

答案 0 :(得分:0)

您可以使用https://app.quicktype.io/解析任何JSON,以下是JSON的模型类

// To parse this JSON data, do
//
//     final responseModel = responseModelFromJson(jsonString);

import 'dart:convert';

ResponseModel responseModelFromJson(String str) => ResponseModel.fromJson(json.decode(str));

String responseModelToJson(ResponseModel data) => json.encode(data.toJson());

class ResponseModel {
Data data;
Extensions extensions;

ResponseModel({
    this.data,
    this.extensions,
});

factory ResponseModel.fromJson(Map<String, dynamic> json) => ResponseModel(
    data: json["data"] == null ? null : Data.fromJson(json["data"]),
    extensions: json["extensions"] == null ? null : Extensions.fromJson(json["extensions"]),
);

Map<String, dynamic> toJson() => {
    "data": data == null ? null : data.toJson(),
    "extensions": extensions == null ? null : extensions.toJson(),
    };
}

class Data {
List<User> user;

Data({
    this.user,
});

factory Data.fromJson(Map<String, dynamic> json) => Data(
    user: json["User"] == null ? null : List<User>.from(json["User"].map((x) => User.fromJson(x))),
);

Map<String, dynamic> toJson() => {
    "User": user == null ? null : List<dynamic>.from(user.map((x) => x.toJson())),
    };
}

class User {
int userId;
String city;
String country;
String captionType;
String state;
String firstName;
String lastname;
String email;

User({
    this.userId,
    this.city,
    this.country,
    this.captionType,
    this.state,
    this.firstName,
    this.lastname,
    this.email,
});

factory User.fromJson(Map<String, dynamic> json) => User(
    userId: json["userId"] == null ? null : json["userId"],
    city: json["city"] == null ? null : json["city"],
    country: json["country"] == null ? null : json["country"],
    captionType: json["captionType"] == null ? null : json["captionType"],
    state: json["state"] == null ? null : json["state"],
    firstName: json["firstName"] == null ? null : json["firstName"],
    lastname: json["lastname"] == null ? null : json["lastname"],
    email: json["email"] == null ? null : json["email"],
);

Map<String, dynamic> toJson() => {
    "userId": userId == null ? null : userId,
    "city": city == null ? null : city,
    "country": country == null ? null : country,
    "captionType": captionType == null ? null : captionType,
    "state": state == null ? null : state,
    "firstName": firstName == null ? null : firstName,
    "lastname": lastname == null ? null : lastname,
    "email": email == null ? null : email,
    };
}

class Extensions {
String type;

Extensions({
    this.type,
});

factory Extensions.fromJson(Map<String, dynamic> json) => Extensions(
    type: json["type"] == null ? null : json["type"],
);

Map<String, dynamic> toJson() => {
    "type": type == null ? null : type,
    };
}

使用此代码来解析您的回复

ResponseModel  responseModel = responseModelFromJson(result.data);
return listViewWidget(responseModel.data.user);