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(_:)zwracaData, które można przekształcić za pomocąString(data:encoding:).outputFormattingwraz z.prettyPrintedi.sortedKeyssteruje 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
- Zgodność z Codable
- Kodowanie za pomocą JSONEncoder
- Dekodowanie za pomocą JSONDecoder
- Obsługa typów optional i zagnieżdżonych