JsonEncoder.withIndent în Dart

Un convertor reutilizabil spre JSON; varianta withIndent scrie JSON frumos, pe mai multe rânduri, cu indentare.

Sintaxă
const JsonEncoder([Object? toEncodable(Object? o)?])
const JsonEncoder.withIndent(String? indent, [Object? toEncodable(Object? o)?])
String convert(Object? object)

Ce face JsonEncoder.withIndent

JsonEncoder este clasa din spatele lui jsonEncode. Creezi o dată convertorul și apelezi convert(obiect) de câte ori vrei. const JsonEncoder() scrie pe un rând, exact ca jsonEncode.

JsonEncoder.withIndent(' ') pune fiecare cheie și fiecare element pe rândul lui, indentat cu textul dat (de obicei două spații). Este forma potrivită pentru fișiere de configurare citite de oameni sau pentru afișare la depanare.

Ca orice Converter, se poate lega cu alte convertoare: encoder.fuse(utf8.encoder) transformă direct obiectul în octeți UTF-8.

Parametri

Parametru Descriere
indent Textul folosit pentru un nivel de indentare (de ex. ' '). null înseamnă fără indentare.
toEncodable Opțional, ca la jsonEncode.

Ce returnează

convert returnează textul JSON.

Exemple

Exemplul 1: JSON indentat

import 'dart:convert';

void main() {
  const frumos = JsonEncoder.withIndent('  ');
  final config = {
    'aplicatie': 'Catalog',
    'versiune': 2,
    'clase': ['9A', '10B'],
    'baza': {'gazda': 'localhost', 'port': 5432},
  };
  print(frumos.convert(config));
}

Rezultat

{
  "aplicatie": "Catalog",
  "versiune": 2,
  "clase": [
    "9A",
    "10B"
  ],
  "baza": {
    "gazda": "localhost",
    "port": 5432
  }
}

Exemplul 2: Același convertor, folosit de mai multe ori

import 'dart:convert';

void main() {
  const compact = JsonEncoder();
  final elevi = [
    {'nume': 'Ana', 'nota': 10},
    {'nume': 'Ion', 'nota': 8},
  ];
  for (final e in elevi) {
    print(compact.convert(e));
  }
  print(compact.convert(elevi) == jsonEncode(elevi));
}

Rezultat

{"nume":"Ana","nota":10}
{"nume":"Ion","nota":8}
true

Greșeli frecvente

  • Dai un număr în loc de text: JsonEncoder.withIndent(2) nu compilează. Indentarea este un String, de exemplu ' ' sau '\t'.

Comenzi înrudite

  • jsonEncode: Transformă hărți, liste, texte, numere, bool și null într-un text JSON; alte obiecte trebuie să aibă toJson().
  • JsonDecoder: Convertorul reutilizabil din JSON în obiecte Dart; se poate lega de utf8.decoder pentru fișiere și fluxuri.
  • Codec: Clasa de bază pentru perechi encode/decode (utf8, base64, json); fuse le leagă în lanț, inverted le inversează.