0Pricing
Swift Academy · Lekcja

Kodowanie za pomocą JSONEncoder

Tworzenie danych JSON z wartości Swift.

Kodowanie za pomocą JSONEncoder to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Tworzenie obiektu JSONEncoder

JSONEncoder to narzędzie, które przekształca dowolną wartość Encodable w dane JSON typu Data. Należy je utworzyć, a następnie wywołać encode(_:) dla danej wartości.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let encoder = JSONEncoder()
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(data.count, "bytes")

Od danych Data do czytelnego tekstu

encode(_:) zwraca binarne dane typu Data. Aby je odczytać, należy zdekodować bajty jako UTF-8 za pomocą String(data:encoding:).

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let data = try JSONEncoder().encode(Movie(title: "Up", year: 2009))
let text = String(data: data, encoding: .utf8)!
print(text)

Formatowanie wyniku z wcięciami

Domyślnie JSON jest kompaktowy. Ustawienie outputFormatting = .prettyPrinted dodaje wcięcia i znaki nowego wiersza, dzięki czemu wynik jest łatwy do odczytania.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(String(data: data, encoding: .utf8)!)

Sortowanie kluczy w celu uzyskania stabilnego wyniku

Opcje można łączyć w tablicy. Dodanie .sortedKeys porządkuje klucze alfabetycznie, dzięki czemu wynik jest deterministyczny — to świetne rozwiązanie na potrzeby testów i snapshotów.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
    var rating: Double
}

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(Movie(title: "Up", year: 2009, rating: 4.8))
print(String(data: data, encoding: .utf8)!)

Kodowanie tablic

Kolekcje można kodować bezpośrednio. Tablica wartości Encodable staje się tablicą JSON.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let list = [Movie(title: "Up", year: 2009),
            Movie(title: "Coco", year: 2017)]
let data = try JSONEncoder().encode(list)
print(String(data: data, encoding: .utf8)!)

Kodowanie słowników

Słownik typu [String: Encodable-element] jest kodowany jako obiekt JSON. Należy pamiętać, że kolejność kluczy nie jest gwarantowana, chyba że zostanie dodane .sortedKeys.

import Foundation

let scores: [String: Int] = ["alice": 90, "bob": 75]
let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
let data = try encoder.encode(scores)
print(String(data: data, encoding: .utf8)!)

Kodowanie zagnieżdżonych struktur

Zagnieżdżone typy Codable są kodowane rekurencyjnie, co automatycznie tworzy zagnieżdżone obiekty JSON.

import Foundation

struct Author: Codable { var name: String }
struct Post: Codable {
    var title: String
    var author: Author
}

let p = Post(title: "Hello", author: Author(name: "Mae"))
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
print(String(data: try encoder.encode(p), encoding: .utf8)!)

Ponowne używanie obiektu Encoder

Skonfigurowanego obiektu JSONEncoder można używać ponownie dla wielu wartości. Należy skonfigurować go raz i stosować to samo formatowanie w całym kodzie.

import Foundation

struct Tag: Codable { var name: String }

let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
for t in [Tag(name: "swift"), Tag(name: "json")] {
    let data = try encoder.encode(t)
    print(String(data: data, encoding: .utf8)!)
}

Kodowanie liczb i wartości logicznych

Właściwości liczbowe i logiczne są kodowane jako literały JSON — bez cudzysłowów. Ciągi znaków są ujmowane w cudzysłowy, natomiast Int, Double i Bool nie.

import Foundation

struct Stats: Codable {
    var count: Int
    var ratio: Double
    var enabled: Bool
}

let data = try JSONEncoder().encode(Stats(count: 3, ratio: 0.75, enabled: true))
print(String(data: data, encoding: .utf8)!)

Kodowanie wartości opcjonalnych

Domyślnie opcjonalna wartość nil jest całkowicie pomijana w JSON. Opcjonalna wartość, która nie jest równa nil, jest kodowana jako opakowana w niej wartość.

import Foundation

struct Item: Codable {
    var name: String
    var note: String?
}

let data = try JSONEncoder().encode(Item(name: "Pen", note: nil))
print(String(data: data, encoding: .utf8)!)

Połączenie wszystkich elementów

Typowy przebieg kodowania wygląda następująco: utworzenie wartości, skonfigurowanie kodera, wywołanie encode, a następnie przekształcenie obiektu Data w String na potrzeby logowania lub przesyłania.

import Foundation

struct Order: Codable {
    var id: Int
    var items: [String]
}

let order = Order(id: 42, items: ["a", "b"])
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(order)
print(String(data: data, encoding: .utf8)!)

Szybkie sprawdzenie: JSONEncoder

Sprawdź swoją wiedzę na temat kodowania.

Podsumowanie: kodowanie za pomocą JSONEncoder

Poznałeś sposób przekształcania wartości Swift w JSON:

  • encode(_:) zwraca Data, które można przekształcić za pomocą String(data:encoding:).
  • outputFormatting wraz z .prettyPrinted i .sortedKeys steruje układem wyniku.
  • Tablice, słowniki, typy zagnieżdżone, liczby, wartości logiczne i opcjonalne są kodowane w odpowiedni sposób.
  • Skonfigurowanego kodera można używać ponownie dla wielu wartości.

Często zadawane pytania

Czy lekcja „Kodowanie za pomocą JSONEncoder” jest bezpłatna?

Tak — pełny tekst „Kodowanie za pomocą JSONEncoder” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Kodowanie za pomocą JSONEncoder”?

Tworzenie danych JSON z wartości Swift. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Kodowanie za pomocą JSONEncoder”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zgodność z Codable
  2. Kodowanie za pomocą JSONEncoder
  3. Dekodowanie za pomocą JSONDecoder
  4. Obsługa typów optional i zagnieżdżonych
← Powrót do Swift Academy