Dart:
Lavorare con JSON

Come fare:

Dart offre supporto integrato per JSON con la libreria dart:convert, rendendo semplice codificare e decodificare JSON. Di seguito sono riportati esempi che mostrano le operazioni di base:

Analisi di Stringa JSON in Oggetto Dart:

import 'dart:convert';

void main() {
  // Stringa JSON di esempio
  String jsonString = '{"name": "John", "age": 30, "email": "[email protected]"}';
  
  // Decodifica di JSON in Mappa Dart
  Map<String, dynamic> user = jsonDecode(jsonString);
  
  print('Ciao, ${user['name']}! Hai ${user['age']} anni.');
  // Output: Ciao, John! Hai 30 anni.
}

Codifica di Oggetto Dart in Stringa JSON:

import 'dart:convert';

void main() {
  // Oggetto Dart di esempio
  Map<String, dynamic> user = {
    'name': 'Jane',
    'age': 25,
    'email': '[email protected]'
  };
  
  // Codifica di Mappa Dart in JSON
  String jsonString = jsonEncode(user);
  
  print(jsonString);
  // Output: {"name":"Jane","age":25,"email":"[email protected]"}
}

Uso di json_serializable per Modelli Complessi: Per modelli di dati complessi, la serializzazione manuale può essere onerosa. Il pacchetto json_serializable automatizza questo processo. Richiede una configurazione aggiuntiva, inclusa l’aggiunta di dipendenze nel proprio pubspec.yaml e la creazione di file di compilazione. Dopo la configurazione, è possibile usarlo come segue:

  1. Definire un modello con annotazioni:
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. Generare la struttura di serializzazione: Utilizzare il comando build runner per generare il file user.g.dart:
flutter pub run build_runner build
  1. Usare il proprio modello:
void main() {
  // Analisi di JSON in Utente
  Map userMap = jsonDecode('{"name": "John", "age": 30, "email": "[email protected]"}');
  User user = User.fromJson(userMap);
  
  print('Utente: ${user.name}, Età: ${user.age}');
  // Output: Utente: John, Età: 30

  // Conversione dell'Utente di nuovo in JSON
  String jsonString = jsonEncode(user.toJson());
  print(jsonString);
  // Output: {"name":"John","age":30,"email":"[email protected]"}
}

Questi esempi illustrano le interazioni di base e avanzate con JSON in Dart, permettendo agli sviluppatori di gestire compiti di serializzazione dei dati nelle loro applicazioni senza problemi.