• JSON数据的解析和生成(Dart)


    课题

    • 将 JSON 字符串反序列化为 Persons 类(结构)的对象 ,然后将这个对象序列化为 JSON 字符串。
    • Persons 类(结构)包含一个字段:Person 类(结构)的 persons 数组。
    • Person 类(结构)包含两个字段:字符串类型的 name 字段和整数类型的 age 字段。

    创建工程

    打开 Intellij IDEA, 安装 Dart 插件
    新建工程,选择 Dart -> Dart Command Line App, 输入 Dart SDK 路径,
    然后点击 Next,输入工程名 example,完成向导。

    添加依赖

    在 pubspec.yaml 的 dependencies 部分添加依赖

    dependencies:
      json_annotation: ^3.0.0
      analyzer: '0.39.14'
    

    点击文件上方的 Pub get 链接下载依赖

    Dart

    example.dart 代码如下

    import 'dart:convert';
    
    import 'package:json_annotation/json_annotation.dart';
    
    part 'example.g.dart';
    
    @JsonSerializable()
    class Persons {
      List<Person> persons;
    
      Persons() {}
      factory Persons.fromJson(Map<String, dynamic> json) => _$PersonsFromJson(json);
      Map<String, dynamic> toJson() => _$PersonsToJson(this);
      @override
      String toString() => "persons=$persons";
    }
    
    @JsonSerializable()
    class Person {
      @JsonKey(name: 'name')
      String name;
      int age;
    
      Person() {}
      factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
      Map<String, dynamic> toJson() => _$PersonToJson(this);
      @override
      String toString() => "name=$name,age=$age";
    }
    
    void main() {
      final jsonString = """
    {
      "persons" : [
        {
          "name" : "Joe",
          "age" : 12
        }
      ]
    }
    """;
      final o = Persons.fromJson(jsonDecode(jsonString) as Map<String, dynamic>);
      print(o);
      final s = jsonEncode(o);
      print(s);
      final s2 = JsonEncoder.withIndent("  ").convert(o);
      print(s2);
    }
    

    生成 json 转换的代码

    在工程根目录下执行以下命令

    pub run build_runner build
    

    该命令会生成 example.g.dart 文件

    // GENERATED CODE - DO NOT MODIFY BY HAND
    
    part of 'example.dart';
    
    // **************************************************************************
    // JsonSerializableGenerator
    // **************************************************************************
    
    Persons _$PersonsFromJson(Map<String, dynamic> json) {
      return Persons()
        ..persons = (json['persons'] as List)
            ?.map((e) =>
                e == null ? null : Person.fromJson(e as Map<String, dynamic>))
            ?.toList();
    }
    
    Map<String, dynamic> _$PersonsToJson(Persons instance) => <String, dynamic>{
          'persons': instance.persons,
        };
    
    Person _$PersonFromJson(Map<String, dynamic> json) {
      return Person()
        ..name = json['name'] as String
        ..age = json['age'] as int;
    }
    
    Map<String, dynamic> _$PersonToJson(Person instance) => <String, dynamic>{
          'name': instance.name,
          'age': instance.age,
        };
    

    输出

    程序执行后的输出为

    persons=[name=Joe,age=12]
    {"persons":[{"name":"Joe","age":12}]}
    {
      "persons": [
        {
          "name": "Joe",
          "age": 12
        }
      ]
    }
    
    
  • 相关阅读:
    Linux 安装多版本Python
    ElasticSearch 镜像 & 安装 & 简易集群
    SpringBoot-异步调用@Async
    SprinigBoot整合Kafka
    Kafka快速安装部署
    Linux-JDK安装
    npm / yarn 配置镜像、使用方法
    React搭建项目(全家桶)
    原生JS 将canvas生成图片
    原生 JS 的 Base64 转码
  • 原文地址:https://www.cnblogs.com/zwvista/p/13672431.html
Copyright © 2020-2023  润新知