Flutter数据转换插件transformer_simplified的使用
Flutter数据转换插件transformer_simplified的使用
Transformer Simplified 是一个简单的库,用于在 JSON 结构之间进行映射和转换。考虑到 JSON 结构是一个 Map<String, dynamic>
类型,此库可以用来转换任何这种类型的映射。
示例代码
以下是一个完整的示例,展示了如何使用 TransformerSimplified
进行数据转换。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart'; // 引入路径提供者
import 'package:transformer_simplified/transformer_simplified.dart';
void main() async {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Transformer Simplified Example")),
body: Center(
child: ElevatedButton(
onPressed: () async {
dynamic jsonData = json.decode(await File('./example/mapping.json').readAsString());
TransformerRegistry.get().setCustom('revert', Revert());
TransformerSimplified.get().load('mapping', jsonData);
String key1LowerCase = 'david lower case';
String streetUpperCase = 'STREET IN UPPERCASE';
String zipCodeAsString = '10000';
String otherZipCode = 'other cedex in lowercase';
Map<String, dynamic> input = {
'key1': key1LowerCase,
'key2': [
{
'street': streetUpperCase,
'zipcode': zipCodeAsString,
'city': 'myCity',
'alias': {'otherZipCode': 'cedex in lowercase'}
},
{
'street': 'STREET2 IN UPPERCASE2',
'zipcode': '30000',
'city': 'yourCity',
'alias': {'otherZipCode': otherZipCode}
}
],
};
dynamic output = TransformerSimplified.get()
.execute(input, 'formUserToJSonUser', 'mapping');
print(output);
},
child: Text("执行转换"),
),
),
),
);
}
}
JSON 映射配置
以下是用于映射和转换的 JSON 配置文件示例:
[
{
"id": "formUserToJSonUser",
"mappings": [
{
"type": "single",
"input": {
"path": "key1"
},
"output": {
"path": "name1"
},
"transformer": "builtin://toUppercase"
},
{
"type": "complex",
"list": true,
"input": {
"path": "key2"
},
"output": {
"path": "addresses",
"comment": "列表类型要么是从第一个根类型中推断出来的类型,要么是 Map<String, dynamic> 如果输出是 map/list 且没有预定义的类型"
},
"transformer": "mapping://map2Address"
}
]
},
{
"id": "map2Address",
"mappings": [
{
"type": "single",
"input": {
"path": "street"
},
"output": {
"path": "street"
},
"transformer": "builtin://toLowercase"
},
{
"type": "single",
"input": {
"path": "zipcode"
},
"output": {
"path": "ZipCode"
},
"transformer": "builtin://toInteger"
},
{
"type": "single",
"input": {
"path": "city"
},
"output": {
"path": "city"
}
},
{
"type": "complex",
"input": {
"path": "alias"
},
"output": {
"path": "alias"
},
"transformer": "mapping://mappingAlias"
}
]
},
{
"id": "mappingAlias",
"mappings": [
{
"type": "single",
"input": {
"path": "otherZipCode"
},
"output": {
"path": "newZipCode"
},
"transformer": "custom://revert"
}
]
}
]
Dart 代码解释
-
导入必要的包:
import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:transformer_simplified/transformer_simplified.dart';
-
读取 JSON 文件并解析:
dynamic jsonData = json.decode(await File('./example/mapping.json').readAsString());
-
注册自定义转换器:
TransformerRegistry.get().setCustom('revert', Revert());
-
加载映射配置:
TransformerSimplified.get().load('mapping', jsonData);
-
准备输入数据:
Map<String, dynamic> input = { 'key1': key1LowerCase, 'key2': [ { 'street': streetUpperCase, 'zipcode': zipCodeAsString, 'city': 'myCity', 'alias': {'otherZipCode': 'cedex in lowercase'} }, { 'street': 'STREET2 IN UPPERCASE2', 'zipcode': '30000', 'city': 'yourCity', 'alias': {'otherZipCode': otherZipCode} } ], };
-
执行转换:
dynamic output = TransformerSimplified.get() .execute(input, 'formUserToJSonUser', 'mapping');
更多关于Flutter数据转换插件transformer_simplified的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复