Dart Convert Library
Data encoding, decoding, and format conversion
π What is Dart Convert Library?
Dart Convert Library provides utilities for encoding and decoding data between different formats. It handles JSON, UTF-8, Base64, and other data transformations essential for web development and data processing.
import 'dart:convert';
void main() {
Map data = {'name': 'Alice', 'age': 30};
String jsonString = json.encode(data);
print('JSON: $jsonString');
Map decoded = json.decode(jsonString);
print('Decoded: $decoded');
}
Output:
JSON: {"name":"Alice","age":30}
Decoded: {name: Alice, age: 30}
Conversion Types
JSON
JavaScript Object Notation encoding/decoding
json.encode({'key': 'value'});
json.decode('{"key":"value"}');
UTF-8
Unicode text encoding and decoding
utf8.encode('Hello World');
utf8.decode([72, 101, 108, 108, 111]);
Base64
Base64 encoding for binary data
base64.encode([1, 2, 3, 4]);
base64.decode('AQIDBA==');
URL Encoding
URL-safe string encoding
Uri.encodeComponent('hello world');
Uri.decodeComponent('hello%20world');
πΉ JSON Operations
Working with JSON data - the most common data format:
import 'dart:convert';
void main() {
// Encoding Dart objects to JSON
Map person = {
'name': 'John Doe',
'age': 25,
'isStudent': true,
'hobbies': ['reading', 'coding', 'gaming'],
'address': {
'street': '123 Main St',
'city': 'New York',
'zipCode': '10001'
}
};
String jsonString = json.encode(person);
print('JSON String:');
print(jsonString);
// Pretty printing JSON
JsonEncoder encoder = JsonEncoder.withIndent(' ');
String prettyJson = encoder.convert(person);
print('\nPretty JSON:');
print(prettyJson);
// Decoding JSON to Dart objects
String jsonData = '{"name":"Alice","scores":[95,87,92],"active":true}';
Map decoded = json.decode(jsonData);
print('\nDecoded Data:');
print('Name: ${decoded['name']}');
print('Scores: ${decoded['scores']}');
print('Active: ${decoded['active']}');
print('First score: ${decoded['scores'][0]}');
}
Output:
JSON String:
{"name":"John Doe","age":25,"isStudent":true,"hobbies":["reading","coding","gaming"],"address":{"street":"123 Main St","city":"New York","zipCode":"10001"}}
Pretty JSON:
{
"name": "John Doe",
"age": 25,
"isStudent": true,
"hobbies": ["reading", "coding", "gaming"]
}
Decoded Data:
Name: Alice
Scores: [95, 87, 92]
Active: true
First score: 95
πΉ UTF-8 Encoding
Converting between strings and bytes:
import 'dart:convert';
void main() {
// String to bytes (UTF-8 encoding)
String text = 'Hello, δΈη! π';
List bytes = utf8.encode(text);
print('Original text: $text');
print('UTF-8 bytes: $bytes');
print('Byte length: ${bytes.length}');
print('String length: ${text.length}');
// Bytes to string (UTF-8 decoding)
String decoded = utf8.decode(bytes);
print('Decoded text: $decoded');
// Working with different encodings
String englishText = 'Hello World';
String chineseText = 'δ½ ε₯½δΈη';
String emojiText = 'πππ';
print('\nEncoding different texts:');
print('English: ${utf8.encode(englishText).length} bytes');
print('Chinese: ${utf8.encode(chineseText).length} bytes');
print('Emoji: ${utf8.encode(emojiText).length} bytes');
// Handling encoding errors
List invalidBytes = [0xFF, 0xFE, 0xFD];
try {
String result = utf8.decode(invalidBytes);
print('Decoded: $result');
} catch (e) {
print('Encoding error: $e');
// Use allowMalformed to handle errors gracefully
String result = utf8.decode(invalidBytes, allowMalformed: true);
print('Decoded with allowMalformed: $result');
}
}
Output:
Original text: Hello, δΈη! π
UTF-8 bytes: [72, 101, 108, 108, 111, 44, 32, 228, 184, 150, 231, 149, 140, 33, 32, 240, 159, 140, 141]
Byte length: 19
String length: 11
Decoded text: Hello, δΈη! π
Encoding different texts:
English: 11 bytes
Chinese: 12 bytes
Emoji: 12 bytes
Encoding error: FormatException: Invalid UTF-8 byte
Decoded with allowMalformed: οΏ½οΏ½οΏ½
πΉ Base64 Encoding
Encoding binary data as text:
import 'dart:convert';
void main() {
// Basic Base64 encoding
String text = 'Hello Dart!';
List bytes = utf8.encode(text);
String encoded = base64.encode(bytes);
print('Original: $text');
print('Base64: $encoded');
// Base64 decoding
List decodedBytes = base64.decode(encoded);
String decoded = utf8.decode(decodedBytes);
print('Decoded: $decoded');
// URL-safe Base64
List binaryData = [255, 254, 253, 252, 251, 250];
String urlSafeEncoded = base64Url.encode(binaryData);
String regularEncoded = base64.encode(binaryData);
print('\nBinary data: $binaryData');
print('Regular Base64: $regularEncoded');
print('URL-safe Base64: $urlSafeEncoded');
// Encoding images or files (simulated)
List imageData = List.generate(20, (i) => i * 10);
String imageBase64 = base64.encode(imageData);
print('\nImage data (simulated): $imageData');
print('Image as Base64: $imageBase64');
// Creating data URLs
String dataUrl = 'data:image/png;base64,$imageBase64';
print('Data URL: $dataUrl');
// Working with larger data
List largeData = List.generate(100, (i) => i % 256);
String largeEncoded = base64.encode(largeData);
print('\nLarge data encoded length: ${largeEncoded.length}');
print('Original data length: ${largeData.length}');
print('Encoding overhead: ${((largeEncoded.length / largeData.length) * 100).toStringAsFixed(1)}%');
}
Output:
Original: Hello Dart!
Base64: SGVsbG8gRGFydCE=
Decoded: Hello Dart!
Binary data: [255, 254, 253, 252, 251, 250]
Regular Base64: //79/Pv6
URL-safe Base64: __79_Pv6
Image data (simulated): [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190]
Image as Base64: ABQeKDI8RlBagIyWoK6y
Data URL: data:image/png;base64,ABQeKDI8RlBagIyWoK6y
Large data encoded length: 136
Original data length: 100
Encoding overhead: 136.0%
πΉ URL Encoding
Encoding URLs and query parameters:
import 'dart:convert';
void main() {
// URL component encoding
String searchQuery = 'hello world & special chars!';
String encoded = Uri.encodeComponent(searchQuery);
String decoded = Uri.decodeComponent(encoded);
print('Original: $searchQuery');
print('Encoded: $encoded');
print('Decoded: $decoded');
// Building URLs with parameters
Map params = {
'q': 'dart programming',
'category': 'tutorials & guides',
'sort': 'date',
'filter': 'beginner friendly'
};
String baseUrl = 'https://example.com/search';
List queryParts = [];
params.forEach((key, value) {
String encodedKey = Uri.encodeComponent(key);
String encodedValue = Uri.encodeComponent(value);
queryParts.add('$encodedKey=$encodedValue');
});
String fullUrl = '$baseUrl?${queryParts.join('&')}';
print('\nBuilt URL:');
print(fullUrl);
// Using Uri class for URL building
Uri uri = Uri.https('api.example.com', '/v1/search', {
'query': 'flutter & dart',
'limit': '10',
'offset': '0'
});
print('\nUsing Uri class:');
print('Full URI: $uri');
print('Host: ${uri.host}');
print('Path: ${uri.path}');
print('Query: ${uri.query}');
// Parsing URLs
String urlString = 'https://example.com/path?name=John%20Doe&age=25';
Uri parsedUri = Uri.parse(urlString);
print('\nParsed URL:');
print('Scheme: ${parsedUri.scheme}');
print('Host: ${parsedUri.host}');
print('Path: ${parsedUri.path}');
print('Query parameters:');
parsedUri.queryParameters.forEach((key, value) {
print(' $key: $value');
});
}
Output:
Original: hello world & special chars!
Encoded: hello%20world%20%26%20special%20chars%21
Decoded: hello world & special chars!
Built URL:
https://example.com/search?q=dart%20programming&category=tutorials%20%26%20guides&sort=date&filter=beginner%20friendly
Using Uri class:
Full URI: https://api.example.com/v1/search?query=flutter%20%26%20dart&limit=10&offset=0
Host: api.example.com
Path: /v1/search
Query: query=flutter%20%26%20dart&limit=10&offset=0
Parsed URL:
Scheme: https
Host: example.com
Path: /path
Query parameters:
name: John Doe
age: 25
πΉ Custom Converters
Creating custom data converters:
import 'dart:convert';
// Custom class for demonstration
class Person {
String name;
int age;
List hobbies;
Person(this.name, this.age, this.hobbies);
// Convert to JSON-serializable map
Map toJson() {
return {
'name': name,
'age': age,
'hobbies': hobbies,
};
}
// Create from JSON map
factory Person.fromJson(Map json) {
return Person(
json['name'],
json['age'],
List.from(json['hobbies']),
);
}
@override
String toString() => 'Person(name: $name, age: $age, hobbies: $hobbies)';
}
void main() {
// Create person objects
List people = [
Person('Alice', 25, ['reading', 'coding']),
Person('Bob', 30, ['gaming', 'cooking', 'hiking']),
Person('Charlie', 28, ['music', 'photography']),
];
// Convert to JSON
List
Output:
People as JSON:
[
{
"name": "Alice",
"age": 25,
"hobbies": ["reading", "coding"]
}
]
Parsed people:
Person(name: David, age: 35, hobbies: [traveling, writing])
Person(name: Eve, age: 22, hobbies: [dancing, painting, yoga])
From CSV format:
Person(name: Alice, age: 25, hobbies: [reading, coding])
Person(name: Bob, age: 30, hobbies: [gaming, cooking, hiking])