Flutter 如何使用在线转码工具将 JSON 转为 Model
  xx2YH4ad7R0N 2023年11月02日 33 0


国内大佬CrazyCodeBoy提供的工具:

​JSON 转Dart - CrazyCodeBoy的技术博客官网|CrazyCodeBoy|Devio|专注移动技术开发(Android&IOS)、Flutter开发、Flutter教程、React Native开发、React Native教程、React Native博客​

正文开始。

目标 json:

{
"posts": [
{
"id": "0",
"created": 1590453935992,
"content": "提供基于GraphQL API的数据查询及访问,「Hasura」获990万美元A轮..."
},
{
"id": "1",
"created": 1590453935992,
"content": "为什么GraphQL是API的未来"
},
{
"id": "2",
"created": 1590453935992,
"content": "Netflix:我们为什么要将 GraphQL 引入前端架构?"
}
]
}

打开 quicktype 网站(可能需要科学访问网络):​​Instantly parse JSON in any language | quicktype​

Flutter 如何使用在线转码工具将 JSON 转为 Model_android

点击右上角 Options 按钮,并作如下配置:

Flutter 如何使用在线转码工具将 JSON 转为 Model_flutter_02

粘贴 JSON 到输入框中,并在左上角输入模型名称 ​​PostsData​​:

Flutter 如何使用在线转码工具将 JSON 转为 Model_android_03

右侧会自动生成模型:

Flutter 如何使用在线转码工具将 JSON 转为 Model_flutter_04

复制右侧代码,创建相关类型:

/lib/PostsData.dart:

// To parse this JSON data, do
//
// final postsData = postsDataFromJson(jsonString);

import 'dart:convert';

class PostsData {
final List<Post> posts;

PostsData({
this.posts,
});

factory PostsData.fromJson(String str) => PostsData.fromMap(json.decode(str));

String toJson() => json.encode(toMap());

factory PostsData.fromMap(Map<String, dynamic> json) => PostsData(
posts: json["posts"] == null ? null : List<Post>.from(json["posts"].map((x) => Post.fromMap(x))),
);

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

class Post {
final String id;
final int created;
final String content;

Post({
this.id,
this.created,
this.content,
});

factory Post.fromJson(String str) => Post.fromMap(json.decode(str));

String toJson() => json.encode(toMap());

factory Post.fromMap(Map<String, dynamic> json) => Post(
id: json["id"] == null ? null : json["id"],
created: json["created"] == null ? null : json["created"],
content: json["content"] == null ? null : json["content"],
);

Map<String, dynamic> toMap() => {
"id": id == null ? null : id,
"created": created == null ? null : created,
"content": content == null ? null : content,
};
}

完成,Good Job!


其他在线转换工具

一. 在线生成网站:

​https://javiercbk.github.io/json_to_dart/​

二. JsonToDart 插件【推荐】

在 Android Studio 中安装 JsonToDart 插件,

a.打开 Preferences(Mac)或者 Setting(Window),

b.选择 Plugins,搜索 JsonToDart

点击 Install(上图已经安装),安装完成后重启即可

选定目录,点击右键,选择 New->Json to Dart

将json字符串复制进去,填写类明后,点击Generate按钮即可

附快捷键: 

Windows:ALT + Shift + D

Mac:Option + Shift + D
 

三.​​ 高效率JSON转Model​​

  1. 在pubspec.yaml中添加依赖

json_annotation: ^3.1.0 json_serializable: ^3.5.0 build_runner: ^1.0.0


Flutter 如何使用在线转码工具将 JSON 转为 Model_json_05

在Android Stuido中执行Pub get

  1. 新建模型类(mode/demo_model.dart)
class DemoModel{

}
  1. 在网页上把后端请求到的JSON数据转换成Model:​https://czero1995.github.io/json-to-model/​:网站转换支持无限层次嵌套复杂对象的转换
  • 比如将以下JSON数据复制到网页上(左边):
{
"code": 0,
"data": {
"avatar": "xxx.png",
"id": 7,
"float":0.1,
"is_deleted": false,
"nickname": "nickName",
"openId": null,
"phone": "13641418383",
"store_ids": [1,2],
"updated": "2020-11-05 11:53:10",
"more":[{"a":1,"b":"b","c":{"c1":0.2,"c2":2}}]
}
}
  • 然后转换成Model数据(右边)
import 'package:json_annotation/json_annotation.dart';
part 'demo_model_data.g.dart';
@JsonSerializable(explicitToJson: true)
class DemoModelModel {
DemoModelData data;
DemoModelModel({
this.data,
this.code,
this.message
});
factory DemoModelModel.fromJson(Map<String, dynamic> json) => _$DemoModelModelFromJson(json);
Map<String, dynamic> toJson() => _$DemoModelModelToJson(this);
}

@JsonSerializable(explicitToJson: true)
class DemoModelData {
String avatar;
int id;
double float;
bool is_deleted;
String nickname;
var openId;
String phone;
List<int> store_ids;
String updated;
List<MoreData> more;
DemoModelData({
this.avatar,
this.id,
this.float,
this.is_deleted,
this.nickname,
this.openId,
this.phone,
this.store_ids,
this.updated,
this.more,
});
factory DemoModelData.fromJson(Map<String, dynamic> json) => _$DemoModelDataFromJson(json);
Map<String, dynamic> toJson() => _$DemoModelDataToJson(this);
}

@JsonSerializable(explicitToJson: true)
class MoreData{
int a;
String b;
CData c;
MoreData({
this.a,
this.b,
this.c,
});
factory MoreData.fromJson(Map<String, dynamic> json) => _$MoreDataFromJson(json);
Map<String, dynamic> toJson() => _$MoreDataToJson(this);
}

@JsonSerializable(explicitToJson: true)
class CData{
double c1;
int c2;
CData({
this.c1,
this.c2,
});
factory CData.fromJson(Map<String, dynamic> json) => _$CDataFromJson(json);
Map<String, dynamic> toJson() => _$CDataToJson(this);
}

再将转换之后的数据复制出来覆盖到demo_model.dart文件上

  1. 执行build_runner

在项目终端下执行命令:


flutter pub run build_runner build


执行完成后,会生成demo_model.g.dart文件

整个执行流程如下(打开下面链接查看)


四. ​​JSON to Dart Converter​​ 

​JSON to Dart Converter - Convert JSON Code Online​

Flutter 如何使用在线转码工具将 JSON 转为 Model_json_06

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  iD7FikcuyaVi   2023年11月30日   26   0   0 MacWindowsandroid
  b1UHV4WKBb2S   2023年11月13日   37   0   0 裁剪ideflutter
  b1UHV4WKBb2S   2023年11月13日   29   0   0 flutterDart
xx2YH4ad7R0N