Flutter JSON处理插件jsonic的使用

Flutter JSON处理插件jsonic的使用

在Flutter开发中,处理JSON数据是一个常见的需求。jsonic 是一个强大的插件,用于简化JSON数据的解析过程。通过定义字段映射和校验规则,可以轻松地将JSON数据转换为对象。

以下是一个完整的示例,展示如何使用 jsonic 插件来解析JSON数据。


示例代码

// 导入必要的库
import 'dart:convert';

import 'package:jsonic/jsonic.dart';
import 'package:jsonic/src/jsonic_field.dart';

// 定义一个Person类,用于表示JSON数据结构
class Person {
  // 使用JsonicField定义每个字段及其映射关系
  JsonicField name = JsonicField<String>(mapping: "name");
  JsonicField email = JsonicField<String>(mapping: "email", nullable: true);
  JsonicField phone = JsonicField<String>(mapping: "phone", nullable: true);
  JsonicField cell = JsonicField<String>(mapping: "cell", nullable: true);
  JsonicField status = JsonicField<String>(
    mapping: "status",
    fallback: "ACTIVE",
    acceptedValues: ["ACTIVE", "INACTIVE"], // 限制合法值范围
  );
  JsonicField age = JsonicField<int>(mapping: "age");

  // 初始化Jsonic实例并添加所有字段
  static late Jsonic jsonic;

  Person() {
    jsonic = Jsonic().addAll([
      name,
      email,
      phone,
      cell,
      status,
      age,
    ]);
  }

  // 定义从JSON字符串创建Person对象的方法
  factory Person.fromJson(String json) {
    Person p = Person();
    jsonic.decode(json); // 解析JSON数据
    return p;
  }
}

void main() {
  // 模拟从网络获取的JSON数据
  var jsonFromWeb = jsonEncode({
    "name": "John Doe",
    "email": "john@doe.com",
    "age": 12,
  });

  // 使用fromJson方法解析JSON数据
  var person = Person.fromJson(jsonFromWeb);

  // 打印解析后的数据
  print('''
name: ${person.name.value},
email: ${person.email.value},
phone: ${person.phone.value},
cell: ${person.cell.value},
status: ${person.status.value},
age: ${person.age.value}
''');
}

代码说明

  1. JsonicField

    • 每个字段都通过 JsonicField 定义,并指定其对应的JSON键(mapping)。
    • 支持设置默认值(fallback)、可空性(nullable)和合法值范围(acceptedValues)。
  2. Jsonic

    • Jsonic 是核心类,负责解析JSON数据并填充到对应的字段中。
    • 使用 addAll 方法一次性添加所有字段。
  3. fromJson方法

    • 提供了一个工厂方法,用于从JSON字符串创建 Person 对象。
    • 调用 jsonic.decode(json) 来解析JSON数据。
  4. 打印结果

    • 解析后的数据可以通过字段的 .value 属性访问。

输出结果

运行上述代码后,控制台将输出以下内容:

name: John Doe,
email: john@doe.com,
phone: null,
cell: null,
status: ACTIVE,
age: 12

更多关于Flutter JSON处理插件jsonic的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter JSON处理插件jsonic的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


jsonic 是一个轻量级的 JSON 处理插件,适用于 Flutter 应用。它可以帮助开发者更轻松地解析和生成 JSON 数据。以下是 jsonic 的基本使用方法:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 jsonic 依赖:

dependencies:
  flutter:
    sdk: flutter
  jsonic: ^0.1.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入包

在你的 Dart 文件中导入 jsonic 包:

import 'package:jsonic/jsonic.dart';

3. 解析 JSON

使用 Jsonic 解析 JSON 字符串:

void main() {
  String jsonString = '{"name": "John", "age": 30, "isStudent": false}';
  
  // 解析 JSON 字符串
  var jsonMap = Jsonic.decode(jsonString);
  
  print(jsonMap['name']);  // 输出: John
  print(jsonMap['age']);   // 输出: 30
  print(jsonMap['isStudent']); // 输出: false
}

4. 生成 JSON

将 Dart 对象转换为 JSON 字符串:

void main() {
  var jsonMap = {
    'name': 'John',
    'age': 30,
    'isStudent': false,
  };
  
  // 生成 JSON 字符串
  String jsonString = Jsonic.encode(jsonMap);
  
  print(jsonString);  // 输出: {"name":"John","age":30,"isStudent":false}
}

5. 处理复杂 JSON

jsonic 也可以处理嵌套的 JSON 数据:

void main() {
  String jsonString = '''
  {
    "name": "John",
    "age": 30,
    "address": {
      "street": "123 Main St",
      "city": "New York"
    },
    "hobbies": ["reading", "traveling"]
  }
  ''';
  
  // 解析 JSON 字符串
  var jsonMap = Jsonic.decode(jsonString);
  
  print(jsonMap['name']);  // 输出: John
  print(jsonMap['address']['city']);  // 输出: New York
  print(jsonMap['hobbies'][0]);  // 输出: reading
}

6. 错误处理

在解析 JSON 时,如果遇到格式错误的 JSON 字符串,jsonic 会抛出异常。你可以使用 try-catch 来捕获并处理这些异常:

void main() {
  String invalidJsonString = '{"name": "John", "age": 30,}';  // 错误的 JSON
  
  try {
    var jsonMap = Jsonic.decode(invalidJsonString);
    print(jsonMap);
  } catch (e) {
    print('JSON 解析错误: $e');
  }
}
回到顶部