from_json_to_json

License: MIT Coverage Status Pub Version

A robust Dart package for safe, predictable, and ergonomic conversion between JSON and Dart core types. Handles edge cases, nulls, and type mismatches gracefully—making your serialization and deserialization code cleaner and more reliable.

Features

  • Type-safe decoding: Convert dynamic JSON values to Dart types (String, int, double, bool, List, Map, DateTime, Duration) with sensible defaults.
  • Graceful fallback: Never crash on nulls or invalid input—get empty, zero, or null values as appropriate.
  • Consistent encoding: Convert Dart types back to JSON-ready primitives.
  • Utility checks: Quickly verify if a string is decodable as a list or map.
  • No dependencies: Pure Dart, zero external dependencies.

Quick Start

dependencies:
  from_json_to_json: ^0.1.0
import 'package:from_json_to_json/from_json_to_json.dart';

final list = jsonDecodeList('[1,2,3]'); // [1, 2, 3]
final map = jsonDecodeMap('{"a":1}');
final dt = dateTimeFromIso8601String('2024-01-01T12:00:00Z');
final duration = jsonDecodeDurationInSeconds('1.5'); // 1.5 seconds
final n = jsonDecodeInt('42'); // 42
final b = jsonDecodeBool('true'); // true

API Overview

Type Function Description
List jsonDecodeList Decode JSON string to list, always returns a list
List verifyListDecodability Check if string is a JSON array
Map jsonDecodeMap Decode JSON string to map, always returns a map
Map jsonDecodeNullableMap Decode JSON string to map, returns null if empty/invalid
Map jsonDecodeThrowableMap Decode JSON string to map, throws on error
Map verifyMapDecodability Check if string is a JSON object
String jsonDecodeString Convert dynamic to string, empty if null
String jsonEncodeString Identity for string encoding
int jsonDecodeInt Convert dynamic to int, 0 if invalid
int jsonDecodeNullableInt Convert dynamic to int, null if invalid
int jsonEncodeInt Identity for int encoding
double jsonDecodeDouble Convert dynamic to double, 0 if invalid
double jsonDecodeNullableDouble Convert dynamic to double, null if invalid
double jsonEncodeDouble Identity for double encoding
bool jsonDecodeBool Convert dynamic to bool, false if invalid
bool jsonEncodeBool Identity for bool encoding
DateTime dateTimeFromMilisecondsSinceEpoch int? → DateTime?
DateTime dateTimeToMilisecondsSinceEpoch DateTime? → int?
DateTime dateTimeFromIso8601String String? → DateTime?
DateTime dateTimeToIso8601String DateTime? → String?
Duration jsonDecodeDurationInSeconds dynamic → Duration (seconds, supports double)
Duration jsonDecodeDurationInMicroseconds dynamic → Duration (microseconds)
Duration jsonDecodeDurationInMinutes dynamic → Duration (minutes, supports double)
Duration jsonEncodeDurationInSeconds Duration → int (seconds)
Duration jsonEncodeDurationInMicroseconds Duration → int (microseconds)
Duration jsonEncodeDurationInMinutes Duration → int (minutes)

Examples

List

jsonDecodeList('[1,2,3]'); // [1, 2, 3]
jsonDecodeList(''); // []
jsonDecodeList('invalid'); // throws FormatException
verifyListDecodability('[1,2]'); // true

Map

jsonDecodeMap('{"a":1}'); // {a: 1}
jsonDecodeMap(''); // {}
jsonDecodeMap('invalid'); // throws FormatException
jsonDecodeNullableMap('{}'); // null
verifyMapDecodability('{}'); // true

Numbers

jsonDecodeInt('42'); // 42
jsonDecodeDouble('3.14'); // 3.14
jsonDecodeNullableInt('foo'); // null

Bool

jsonDecodeBool('true'); // true
jsonDecodeBool('0'); // false

DateTime

dateTimeFromMilisecondsSinceEpoch(1700000000000); // DateTime
dateTimeFromIso8601String('2024-01-01T12:00:00Z'); // DateTime

Duration

jsonDecodeDurationInSeconds('1.5'); // 1.5 seconds
jsonDecodeDurationInMicroseconds('1000000'); // 1 second
jsonDecodeDurationInMinutes('2.5'); // 2 min 30 sec

Development

Code Coverage

To generate and view code coverage:

  1. Generate coverage report:
make coverage
  1. View coverage report in browser (requires lcov):
make coverage-open

Note: If you don't have lcov installed, you can install it with:

Changelog

See CHANGELOG.md

License

This package is licensed under the MIT License - see the LICENSE file for details.

Libraries

from_json_to_json