Dart:
Praca z JSON

Jak to zrobić:

Dart oferuje wbudowane wsparcie dla JSON za pomocą biblioteki dart:convert, co ułatwia kodowanie i dekodowanie JSON. Poniżej znajdują się przykłady przedstawiające podstawowe operacje:

Parsowanie ciągu JSON na obiekt Dart:

import 'dart:convert';

void main() {
  // Przykładowy ciąg JSON
  String jsonString = '{"name": "John", "age": 30, "email": "[email protected]"}';
  
  // Dekodowanie JSON do Mapy Dart
  Map<String, dynamic> user = jsonDecode(jsonString);
  
  print('Witaj, ${user['name']}! Masz ${user['age']} lat.');
  // Wynik: Witaj, John! Masz 30 lat.
}

Kodowanie obiektu Dart na ciąg JSON:

import 'dart:convert';

void main() {
  // Przykładowy obiekt Dart
  Map<String, dynamic> user = {
    'name': 'Jane',
    'age': 25,
    'email': '[email protected]'
  };
  
  // Kodowanie Mapy Dart do JSON
  String jsonString = jsonEncode(user);
  
  print(jsonString);
  // Wynik: {"name":"Jane","age":25,"email":"[email protected]"}
}

Używanie json_serializable dla skomplikowanych modeli: Dla skomplikowanych modeli danych, ręczna serializacja może być uciążliwa. Pakiet json_serializable automatyzuje ten proces. Wymaga dodatkowej konfiguracji, w tym dodania zależności do pliku pubspec.yaml oraz tworzenia plików budowania. Po konfiguracji, można go używać w następujący sposób:

  1. Zdefiniuj model z adnotacjami:
import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

@JsonSerializable()
class User {
  String name;
  int age;
  String email;
  
  User({required this.name, required this.age, required this.email});
  
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}
  1. Wygeneruj boilerplate do serializacji: Użyj polecenia build runner, aby wygenerować plik user.g.dart:
flutter pub run build_runner build
  1. Użyj swojego modelu:
void main() {
  // Parsowanie JSON na User
  Map userMap = jsonDecode('{"name": "John", "age": 30, "email": "[email protected]"}');
  User user = User.fromJson(userMap);
  
  print('Użytkownik: ${user.name}, Wiek: ${user.age}');
  // Wynik: Użytkownik: John, Wiek: 30

  // Konwersja User z powrotem na JSON
  String jsonString = jsonEncode(user.toJson());
  print(jsonString);
  // Wynik: {"name":"John","age":30,"email":"[email protected]"}
}

Te przykłady ilustrują podstawowe i zaawansowane interakcje z JSON w Dart, umożliwiając programistom płynne obsługiwanie zadań serializacji danych w ich aplikacjach.