from_json_to_json 0.3.0

SDKdartflutter
Platformandroidioswindowslinuxmacosweb

A small set utilities to safely convert JSON to values and back

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<T>, Map<K,V>, 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.
  • Pure Dart: use in server or client.

Quick Start

dependencies:
  from_json_to_json: ^0.3.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 typedList = jsonDecodeListAs<int>('[1,2,3]'); // List<int> [1, 2, 3]
final typedMap = jsonDecodeMapAs<String, int>('{"a":1}'); // Map<String, int>
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

TypeFunctionDescription
booljsonDecodeBoolConvert dynamic to bool, false if invalid
booljsonEncodeBoolIdentity for bool encoding
DateTimedateTimeFromIso8601StringString? → DateTime?
DateTimedateTimeFromMillisecondsSinceEpochint? → DateTime?
DateTimedateTimeFromYYYYMMDDHMMSSAMString? → DateTime? (YYYY-MM-DD H:MM:SS AM/PM)
DateTimedateTimeToIso8601StringDateTime? → String?
DateTimedateTimeToMillisecondsSinceEpochDateTime? → int?
DateTimedateTimeToYYYYMMDDHMMSSAMDateTime? → String? (YYYY-MM-DD H:MM:SS AM/PM)
doublejsonDecodeDoubleConvert dynamic to double, 0 if invalid
doublejsonDecodeNullableDoubleConvert dynamic to double, null if invalid
doublejsonEncodeDoubleIdentity for double encoding
DurationjsonDecodeDurationFromISO8601String? → Duration (ISO 8601 format: P1Y, P6M, P2W, P30D; shorthand like "1Y", "6M", "2W", "30D" supported with approximate conversions: 1Y=365d, 1M=30d, 1W=7d, 1D=1d)
DurationjsonDecodeDurationInMicrosecondsdynamic → Duration (microseconds)
DurationjsonDecodeDurationInMinutesdynamic → Duration (minutes, supports double)
DurationjsonDecodeDurationInSecondsdynamic → Duration (seconds, supports double)
DurationjsonEncodeDurationInMicrosecondsDuration → int (microseconds)
DurationjsonEncodeDurationInMinutesDuration → int (minutes)
DurationjsonEncodeDurationInSecondsDuration → int (seconds)
DurationjsonEncodeDurationToISO8601Duration → String (ISO 8601 format)
intjsonDecodeIntConvert dynamic to int, 0 if invalid
intjsonDecodeNullableIntConvert dynamic to int, null if invalid
intjsonEncodeIntIdentity for int encoding
ListjsonDecodeListDecode JSON to list, always returns a list
ListjsonDecodeListAs<T>Decode JSON to typed List, may throw on type mismatch
ListverifyListDecodabilityCheck if input is a JSON array
MapjsonDecodeMapDecode JSON to map, always returns a map
MapjsonDecodeMapAs<K,V>Decode JSON to typed Map<K,V>, may throw on type mismatch
MapjsonDecodeNullableMapDecode JSON to map, returns null if empty/invalid
MapjsonDecodeThrowableMapDecode JSON to map, throws on error
MapverifyMapDecodabilityCheck if input is a JSON object
StringjsonDecodeStringConvert dynamic to string, empty if null
StringjsonEncodeStringIdentity for string encoding

Examples

List

jsonDecodeList('[1,2,3]'); // [1, 2, 3]
jsonDecodeListAs<int>('[1,2,3]'); // List<int> [1, 2, 3]
jsonDecodeList(''); // []
jsonDecodeList('invalid'); // throws FormatException
verifyListDecodability('[1,2]'); // true

Map

jsonDecodeMap('{"a":1}'); // {a: 1}
jsonDecodeMapAs<String, int>('{"a":1}'); // Map<String, int> {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

dateTimeFromMillisecondsSinceEpoch(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
jsonDecodeDurationFromISO8601('P1Y'); // 365 days
jsonDecodeDurationFromISO8601('P6M'); // 180 days
jsonDecodeDurationFromISO8601('P2W'); // 14 days
jsonDecodeDurationFromISO8601('P30D'); // 30 days
jsonDecodeDurationFromISO8601('1Y'); // 365 days (shorthand)
jsonDecodeDurationFromISO8601('6M'); // 180 days (shorthand)
jsonDecodeDurationFromISO8601('2W'); // 14 days (shorthand)
jsonDecodeDurationFromISO8601('30D'); // 30 days (shorthand)
jsonEncodeDurationToISO8601(Duration(days: 365)); // "P1Y"
jsonEncodeDurationToISO8601(Duration(days: 180)); // "P6M"
jsonEncodeDurationToISO8601(Duration(days: 14)); // "P2W"
jsonEncodeDurationToISO8601(Duration(days: 30)); // "P1M"

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.