Flutter JSON解析与验证插件json_schema的使用
Flutter JSON解析与验证插件 json_schema
的使用
json_schema
是一个平台无关(web、flutter 或 vm)的 Dart 库,用于根据 JSON Schema 验证 JSON 实例。它支持多版本的 JSON Schema 标准,最新支持 Draft 7。
简单示例用法
创建和验证简单的 JSON Schema
最简单的方式是通过传递 JSON 数据到 JsonSchema.create
方法来创建一个 schema。可以使用 JSON 字符串或解码后的 JSON 对象(Dart Map
或 bool
)。
import 'package:json_schema/json_schema.dart';
void main() {
// 定义一个简单的 schema,要求数据类型为整数
final mustBeIntegerSchemaMap = {"type": "integer"};
// 创建一些示例数据来进行验证
final n = 3;
final decimals = 3.14;
final str = 'hi';
// 构造 schema
final schema = JsonSchema.create(mustBeIntegerSchemaMap);
// 验证并打印结果
print('$n => ${schema.validate(n)}'); // true
print('$decimals => ${schema.validate(decimals)}'); // false
print('$str => ${schema.validate(str)}'); // false
}
异步创建 JSON Schema
如果你有需要从远程 HTTP URI 获取的 $ref
,你可以使用 JsonSchema.createAsync
方法:
import 'package:json_schema/json_schema.dart';
import 'package:http/http.dart' as http;
Future<void> main() async {
// 定义一个带有 $ref 的 schema
final schemaWithRef = {
"\$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {"\$ref": "http://example.com/name.json"}
}
};
// 使用 createAsync 方法异步创建 schema
final schema = await JsonSchema.createAsync(schemaWithRef, httpClient: http.Client());
// 验证数据
final instance = {"name": "John Doe"};
print('Validation result: ${schema.validate(instance)}');
}
从 URL 或文件创建 JSON Schema
你也可以直接从公开可访问的 URL 或本地文件创建 JSON Schema。
从 URL 创建
import 'package:json_schema/json_schema.dart';
import 'package:http/http.dart' as http;
Future<void> main() async {
final url = Uri.parse('http://example.com/schema.json');
final client = http.Client();
// 从 URL 创建 schema
final schema = await JsonSchema.createFromUrl(url, httpClient: client);
// 验证数据
final instance = {"name": "John Doe", "age": 30};
print('Validation result: ${schema.validate(instance)}');
}
从文件创建
import 'package:json_schema/json_schema.dart';
import 'dart:io';
Future<void> main() async {
final file = File('path/to/your/schema.json');
// 读取文件内容
final content = await file.readAsString();
final schemaMap = jsonDecode(content);
// 创建 schema
final schema = JsonSchema.create(schemaMap);
// 验证数据
final instance = {"name": "John Doe", "age": 30};
print('Validation result: ${schema.validate(instance)}');
}
更多关于Flutter JSON解析与验证插件json_schema的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter JSON解析与验证插件json_schema的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用json_schema
插件进行JSON解析与验证的示例代码。这个示例将展示如何定义一个JSON Schema,然后使用该插件来验证一个JSON对象是否符合该Schema。
首先,确保你的Flutter项目中已经添加了json_schema
依赖。你可以在pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
json_schema: ^4.0.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,我们编写一个Flutter应用来演示如何使用json_schema
插件。
import 'package:flutter/material.dart';
import 'package:json_schema/json_schema.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter JSON Schema Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final String schemaJson = '''
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer",
"minimum": 0
},
"email": {
"type": "string",
"format": "email"
}
},
"required": ["name", "age", "email"]
}
''';
final String jsonData = '''
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}
''';
String validationResult = '';
@override
void initState() {
super.initState();
validateJson();
}
void validateJson() async {
try {
var schema = await loadSchema(schemaJson);
var data = jsonDecode(jsonData);
var validator = Validator.fromSchema(schema);
var report = validator.validate(data);
if (report.isEmpty) {
setState(() {
validationResult = 'JSON is valid.';
});
} else {
setState(() {
validationResult = 'JSON is invalid:\n' + report.join('\n');
});
}
} catch (e) {
setState(() {
validationResult = 'Error validating JSON: $e';
});
}
}
Future<Schema> loadSchema(String schemaJson) async {
return Schema.fromJson(jsonDecode(schemaJson));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter JSON Schema Demo'),
),
body: Center(
child: Text(validationResult),
),
);
}
}
代码解释
- 依赖导入:导入
flutter
和json_schema
包。 - 主应用:定义一个简单的Flutter应用,包含一个主页面
MyHomePage
。 - Schema和数据:在
MyHomePage
类中定义了一个JSON Schema字符串和一个待验证的JSON数据字符串。 - 验证逻辑:
- 使用
loadSchema
函数将Schema字符串加载为Schema
对象。 - 使用
jsonDecode
将JSON数据字符串解析为Dart对象。 - 使用
Validator.fromSchema
创建一个验证器,并使用validate
方法验证数据。 - 根据验证结果更新UI显示的信息。
- 使用
- UI显示:在
build
方法中,使用Scaffold
和Center
组件显示验证结果。
运行这个Flutter应用,你应该会看到显示“JSON is valid.”的页面,因为提供的JSON数据符合定义的Schema。如果你修改JSON数据以使其不符合Schema(例如,删除name
字段或将age
字段的值设置为负数),你将看到相应的验证错误信息。