json_to_model

Last updated:

0 purchases

json_to_model Image
json_to_model Images
Add to Cart

Description:

json to model

json_to_model #
Command line tool for generating Dart models (json_serializable) from Json file.
inspired by json_model.
based of the json_to_model
Contents #

Features
Installation
What does this library do

Get started
Examples


Usage

Features #



Feature
Status




Null safety



toJson/fromJson



immutable classes



copyWith generation



clone and deepclone



nested json classes



enum support




Installation #
on pubspec.yaml
dev_dependencies:
json_to_model: ^3.0.1
quiver: ^3.0.1+1
copied to clipboard
install using pub get command or if you using dart vscode/android studio, you can use install option.
What does this library do #
Command line tool to convert .json files into immutable .dart models.
Get started #
The command will run through your json files and find possible type, variable name, import uri, decorator and class name, and will write it into the templates.
Create/copy .json files into ./jsons/(default) on root of your project, and run flutter pub run json_to_model.
Examples #
Input
Consider this files named product.json and employee.json
product.json
{
"id": "123",
"caseId?": "123",
"startDate?": "2020-08-08",
"endDate?": "2020-10-10",
"placementDescription?": "Description string"
}
copied to clipboard
eployee.json
{
"id": "123",
"displayName?": "Jan Jansen",
"@ignore products?": "$[]product"
}
copied to clipboard
Output
This will generate this product.dart and employee.dart
product.dart
import 'package:flutter/foundation.dart';

@immutable
class Product {

const Product({
required this.id,
this.caseId,
this.startDate,
this.endDate,
this.placementDescription,
});

final String id;
final String? caseId;
final String? startDate;
final String? endDate;
final String? placementDescription;

factory Product.fromJson(Map<String,dynamic> json) => Product(
id: json['id'] as String,
caseId: json['caseId'] != null ? json['caseId'] as String : null,
startDate: json['startDate'] != null ? json['startDate'] as String : null,
endDate: json['endDate'] != null ? json['endDate'] as String : null,
placementDescription: json['placementDescription'] != null ? json['placementDescription'] as String : null
);

Map<String, dynamic> toJson() => {
'id': id,
'caseId': caseId,
'startDate': startDate,
'endDate': endDate,
'placementDescription': placementDescription
};

Product clone() => Product(
id: id,
caseId: caseId,
startDate: startDate,
endDate: endDate,
placementDescription: placementDescription
);


Product copyWith({
String? id,
String? caseId,
String? startDate,
String? endDate,
String? placementDescription
}) => Product(
id: id ?? this.id,
caseId: caseId ?? this.caseId,
startDate: startDate ?? this.startDate,
endDate: endDate ?? this.endDate,
placementDescription: placementDescription ?? this.placementDescription,
);

@override
bool operator ==(Object other) => identical(this, other)
|| other is Product && id == other.id && caseId == other.caseId && startDate == other.startDate && endDate == other.endDate && placementDescription == other.placementDescription;

@override
int get hashCode => id.hashCode ^ caseId.hashCode ^ startDate.hashCode ^ endDate.hashCode ^ placementDescription.hashCode;
}

copied to clipboard
eployee.dart
import 'package:flutter/foundation.dart';
import 'product.dart';

@immutable
class Employee {

const Employee({
required this.id,
this.displayName,
this.products,
});

final String id;
final String? displayName;
final List<Product>? products;

factory Employee.fromJson(Map<String,dynamic> json) => Employee(
id: json['id'] as String,
displayName: json['displayName'] != null ? json['displayName'] as String : null
);

Map<String, dynamic> toJson() => {
'id': id,
'displayName': displayName
};

Employee clone() => Employee(
id: id,
displayName: displayName,
products: products?.map((e) => e.clone()).toList()
);


Employee copyWith({
String? id,
String? displayName,
List<Product>? products
}) => Employee(
id: id ?? this.id,
displayName: displayName ?? this.displayName,
products: products ?? this.products,
);

@override
bool operator ==(Object other) => identical(this, other)
|| other is Employee && id == other.id
&& displayName == other.displayName
&& products == other.products;

@override
int get hashCode => id.hashCode ^
displayName.hashCode ^
products.hashCode;
}
copied to clipboard
Input
Consider this file named location.json
{
"locationId?": 93,
"locationTypeId?": "1234",
"updatedAt": "@datetime",
"name?": "Lunet 10a, Veenendaal",
"confidential?": false,
"locationType?": "@enum:INSIDE,OUTSIDE,CLIENT,HOME,ROOM,UNKNOWN",
"point?": {
"longitude": 58.1234,
"latitude": 12.123
}
}
copied to clipboard
Output
This will generate this location.dart
import 'package:flutter/foundation.dart';

@immutable
class Location {

const Location({
this.locationId,
this.locationTypeId,
required this.updatedAt,
this.name,
this.confidential,
this.locationType,
this.point,
});

final int? locationId;
final String? locationTypeId;
final DateTime updatedAt;
final String? name;
final bool? confidential;
LocationLocationTypeEnum
get locationLocationTypeEnum => _locationLocationTypeEnumValues.map[locationType]!;
final String? locationType;
final Point? point;

factory Location.fromJson(Map<String,dynamic> json) => Location(
locationId: json['locationId'] != null ? json['locationId'] as int : null,
locationTypeId: json['locationTypeId'] != null ? json['locationTypeId'] as String : null,
updatedAt: DateTime.parse(json['updatedAt'] as String),
name: json['name'] != null ? json['name'] as String : null,
confidential: json['confidential'] != null ? json['confidential'] as bool : null,
locationType: json['locationType'] != null ? json['locationType'] as String : null,
point: json['point'] != null ? Point.fromJson(json['point'] as Map<String, dynamic>) : null
);

Map<String, dynamic> toJson() => {
'locationId': locationId,
'locationTypeId': locationTypeId,
'updatedAt': updatedAt.toIso8601String(),
'name': name,
'confidential': confidential,
'locationType': _locationLocationTypeEnumValues.reverse[locationType],
'point': point?.toJson()
};

Location clone() => Location(
locationId: locationId,
locationTypeId: locationTypeId,
updatedAt: updatedAt,
name: name,
confidential: confidential,
locationType: locationType,
point: point?.clone()
);

Location copyWith({
int? locationId,
String? locationTypeId,
DateTime? updatedAt,
String? name,
bool? confidential,
String? locationType,
Point? point
}) => Location(
locationId: locationId ?? this.locationId,
locationTypeId: locationTypeId ?? this.locationTypeId,
updatedAt: updatedAt ?? this.updatedAt,
name: name ?? this.name,
confidential: confidential ?? this.confidential,
locationType: locationType ?? this.locationType,
point: point ?? this.point,
);

@override
bool operator ==(Object other) => identical(this, other)
|| other is Location && locationId == other.locationId && locationTypeId == other.locationTypeId && updatedAt == other.updatedAt && name == other.name && confidential == other.confidential && locationType == other.locationType && point == other.point;

@override
int get hashCode => locationId.hashCode ^ locationTypeId.hashCode ^ updatedAt.hashCode ^ name.hashCode ^ confidential.hashCode ^ locationType.hashCode ^ point.hashCode;
}

enum LocationLocationTypeEnum { INSIDE, OUTSIDE, CLIENT, HOME, ROOM, UNKNOWN }

extension LocationLocationTypeEnumEx on LocationLocationTypeEnum{
String? get value => _locationLocationTypeEnumValues.reverse[this];
}

final _locationLocationTypeEnumValues = _LocationLocationTypeEnumConverter({
'INSIDE': LocationLocationTypeEnum.INSIDE,
'OUTSIDE': LocationLocationTypeEnum.OUTSIDE,
'CLIENT': LocationLocationTypeEnum.CLIENT,
'HOME': LocationLocationTypeEnum.HOME,
'ROOM': LocationLocationTypeEnum.ROOM,
'UNKNOWN': LocationLocationTypeEnum.UNKNOWN,
});

class _LocationLocationTypeEnumConverter<String, O> {
final Map<String, O> map;
Map<O, String>? reverseMap;

_LocationLocationTypeEnumConverter(this.map);

Map<O, String> get reverse => reverseMap ??= map.map((k, v) => MapEntry(v, k));
}

@immutable
class Point {

const Point({
required this.longitude,
required this.latitude,
});

final double longitude;
final double latitude;

factory Point.fromJson(Map<String,dynamic> json) => Point(
longitude: json['longitude'] as double,
latitude: json['latitude'] as double
);

Map<String, dynamic> toJson() => {
'longitude': longitude,
'latitude': latitude
};

Point clone() => Point(
longitude: longitude,
latitude: latitude
);


Point copyWith({
double? longitude,
double? latitude
}) => Point(
longitude: longitude ?? this.longitude,
latitude: latitude ?? this.latitude,
);

@override
bool operator ==(Object other) => identical(this, other)
|| other is Point && longitude == other.longitude && latitude == other.latitude;

@override
int get hashCode => longitude.hashCode ^ latitude.hashCode;
}
copied to clipboard
Getting started #

Create a directory jsons(default) at root of your project
Put all or Create json files inside jsons directory
run pub run json_to_model. or flutter packages pub run json_to_model flutter project

Usage #
this package will read .json file, and generate .dart file, asign the type of the value as variable type and key as the variable name.



Description
Expression
Input (Example)
Output(declaration)
Output(import)




declare type depends on the json value
{...:any type}
{"id": 1, "message":"hello world"},
int id;String message;



import model and asign type
{...:"$value"}
{"auth":"$user"}
User auth;
import 'user.dart'


import from path
{...:"$pathto/value"}
{"price":"$product/price"}
Price price;
import '../product/price.dart'


asign list of type and import (can also be recursive)
{...:"$[]value"}
{"addreses":"$[]address"}
List<Address> addreses;
import 'address.dart'


import other library(input value can be array)
{"@import":...}
{"@import":"package:otherlibrary/otherlibrary.dart"}

import 'package:otherlibrary/otherlibrary.dart'


Datetime type
{...:"@datetime"}
{"createdAt": "@datetime:2020-02-15T15:47:51.742Z"}
DateTime createdAt;



Enum type
{...:"@enum:(folowed by enum separated by ',')"}
{"@import":"@enum:admin,app_user,normal"}
enum UserTypeEnum { Admin, AppUser, Normal }



Enum type with values {...:"@enum:(folowed by enum separated by ',')"}
{"@import":"@enum:admin(0),app_user(1),normal(2)"}
enum UserTypeEnum { Admin, AppUser, Normal }

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.