Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fluttercandies/jsontodart
The tool to convert json to dart code, support Windows,Mac,Web.
https://github.com/fluttercandies/jsontodart
dart flutter-mac flutter-web flutter-windows json-dart uwp
Last synced: about 4 hours ago
JSON representation
The tool to convert json to dart code, support Windows,Mac,Web.
- Host: GitHub
- URL: https://github.com/fluttercandies/jsontodart
- Owner: fluttercandies
- License: mit
- Created: 2019-06-26T01:19:31.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-09-10T08:36:39.000Z (5 months ago)
- Last Synced: 2025-02-02T10:53:21.009Z (7 days ago)
- Topics: dart, flutter-mac, flutter-web, flutter-windows, json-dart, uwp
- Language: Dart
- Homepage:
- Size: 26.6 MB
- Stars: 361
- Watchers: 7
- Forks: 47
- Open Issues: 3
-
Metadata Files:
- Readme: README-ZH.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
![](https://github.com/fluttercandies/JsonToDart/blob/master/UWP/Assets/Wide310x150Logo.scale-400.png)
功能最全面的 Json 转换 Dart 的工具,支持 Windows,Mac,Web。
Language: [English](README.md) | 中文简体
- [下载](#下载)
- [使用](#使用)
- [格式化](#格式化)
- [设置](#设置)
- [数据保护](#数据保护)
- [数组保护](#数组保护)
- [遍历数组次数](#遍历数组次数)
- [属性命名](#属性命名)
- [属性排序](#属性排序)
- [添加保护方法](#添加保护方法)
- [空安全](#空安全)
- [智能可空](#智能可空)
- [文件头信息](#文件头信息)
- [属性只读](#属性只读)
- [可空](#可空)
- [多语言](#多语言)
- [修改类信息](#修改类信息)
- [生成Dart](#生成dart)# 下载
Github下载速度太慢,为了方便大家下载,特意在gitee也创建了下载地址。
[Flutter for Windows](https://gitee.com/zmtzawqlp/JsonToDart/releases/)
[Flutter for Macos](https://gitee.com/zmtzawqlp/JsonToDart/releases/)
[Flutter for Web](https://fluttercandies.github.io/JsonToDart/)
[UWP 微软商店](https://www.microsoft.com/store/apps/9NBRW9451QSR) 功能未同步,以后会替换成 [Flutter for UWP](https://github.com/flutter/flutter/issues/14967)
# 使用
## 格式化
点击格式化按钮,将 Json 转换为右边可视化的 Dart 类结构
## 设置
### 数据保护大家一定会有被服务端坑的时候吧? 不按规定好了的数据类型传值,导致 Json 整个解析失败。
打开这个开关,就会在获取数据的时候加一层保护,代码如下
```dart
class FFConvert {
FFConvert._();
static T? Function(dynamic value) convert =
(dynamic value) {
if (value == null) {
return null;
}
return json.decode(value.toString()) as T?;
};
}T? asT(dynamic value, [T? defaultValue]) {
if (value is T) {
return value;
}
try {
if (value != null) {
final String valueS = value.toString();
if ('' is T) {
return valueS as T;
} else if (0 is T) {
return int.parse(valueS) as T;
} else if (0.0 is T) {
return double.parse(valueS) as T;
} else if (false is T) {
if (valueS == '0' || valueS == '1') {
return (valueS == '1') as T;
}
return (valueS == 'true') as T;
} else {
return FFConvert.convert(value);
}
}
} catch (e, stackTrace) {
log('asT<$T>', error: e, stackTrace: stackTrace);
return defaultValue;
}return defaultValue;
}
```你也可以重写 [FFConvert.convert] 来处理特殊的情况,比如
``` dart
FFConvert.convert = (dynamic value) {
if (value == null) {
return null;
}
final dynamic output = json.decode(value.toString());
if ([] is T && output is List) {
return output.map((dynamic e) => asT(e)).toList() as T;
} else if ({} is T && output is Map) {
return output.map((dynamic key, dynamic value) =>
MapEntry(key.toString(), value.toString())) as T;
} else if (const TestMode() is T && output is Map) {
return TestMode.fromJson(output) as T;
}return json.decode(value.toString()) as T?;
};
```### 数组保护
在循环数组的时候,一个出错,导致 Json 整个解析失败的情况,大家遇到过吧?
打开这个开关,将对每一次循环解析进行保护,代码如下
```dart
void tryCatch(Function f) {
try {
f?.call();
} catch (e, stack) {
debugPrint("$e");
debugPrint("$stack");
}
}
```### 遍历数组次数
在服务器返回的数据中,有时候数组里面不是每一个元素都带有全部的属性,
如果只检查第一个话,会存在属性丢失的情况
你可以通过多次循环来避免丢失属性
选项有1,20,99
99就代表循环全部进行检查
### 属性命名
属性命名规范选项:保持原样,驼峰式命名小驼峰,帕斯卡命名大驼峰,匈牙利命名下划线
[Dart 命名规范](https://dart.dev/guides/language/effective-dart/style)
Dart 官方推荐 驼峰式命名小驼峰
### 属性排序
对属性进行排序
排序选项: 保持原样,升序排列,降序排序
### 添加保护方法
是否添加保护方法,数据保护/数组保护的方法。
第一次使用的时候开启就可以了,你可以把方法提出去,后面生成 Dart 就没有必要每个文件里面都包含这2个方法。### 空安全
打开空安全,将生成空安全代码。
### 智能可空
打开智能可空, 所有为null的字段和数组丢失属性将会自动勾选可空### 文件头信息
可以在这里添加 Copyright,Improt dart,创建人信息等等,支持[Date yyyy MM-dd]来生成时间,Date 后面为日期格式。
比如[Date yyyy MM-dd] 会将你生成Dart代码的时间按照 yyyy MM-dd 的格式生成对应时间
### 属性只读
点击格式化之后,右边会显示可视化的 Dart 类结构,在顶部会有下拉选项
选项:none,final
### 可空在空安全打开的前提,设置属性是否可以为空。
## 多语言
支持中文简体,中文繁体和英文。
## 修改类信息
点击格式化之后,右边会显示可视化的 Dart 类结构。
第一列为在 Json 中对应的key
第二列为属性类型/类的名字。如果是类名,会用黄色背景提示
第三列是属性的名字
输入项如果为空,会报红提示
## 生成Dart
做好设置之后,点击生成按钮,左边就会生成 Json 对于的 Dart 代码,并且提示成功,代码自动复制到剪切板。