Kodowanie tabel do JSON
Zserializuje Pan/Pani dane Lua.
Kodowanie tabel do JSON to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 3 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 Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Podstawy kodowania
Kodowanie jest odwrotnością dekodowania: przekształca tabelę Lua w ciąg JSON. Należy wywołać json.encode(table).
Wynikiem jest jednowierszowy ciąg znaków, który można zapisać w pliku lub przesłać przez sieć.
local json = require("dkjson")
local t = { name = "Leo", age = 9 }
print(json.encode(t))Obiekty a tablice
Sposób zakodowania tabeli Lua zależy od jej kluczy. Tabela z kolejnymi kluczami całkowitymi zaczynającymi się od 1 staje się tablicą JSON.
Tabela z kluczami tekstowymi staje się obiektem JSON. Tabel mieszanych należy unikać, ponieważ są niejednoznaczne.
local json = require("dkjson")
print(json.encode({ 1, 2, 3 })) -- [1,2,3]
print(json.encode({ a = 1, b = 2 })) -- {"a":1,"b":2}Czytelne formatowanie
Domyślnie JSON jest zwarty. Biblioteka dkjson może wciąć wynik, jeśli przekaże się tabelę opcji z indent = true.
Tak sformatowany wynik świetnie sprawdza się w plikach konfiguracyjnych, które będą edytowane ręcznie.
local json = require("dkjson")
local t = { name = "Ann", roles = { "dev", "lead" } }
print(json.encode(t, { indent = true }))Kodowanie liczb i wartości logicznych
Liczby i wartości logiczne w Lua są kodowane bezpośrednio jako ich odpowiedniki w JSON. Zarówno liczby całkowite, jak i zmiennoprzecinkowe stają się liczbami JSON.
local json = require("dkjson")
local t = { count = 5, ratio = 1.5, active = true }
print(json.encode(t))Problem z nil
Nie można przechowywać nil w tabeli, aby oznaczało JSON null, ponieważ przypisanie nil całkowicie usuwa klucz.
Aby wygenerować wartość null, należy użyć specjalnej wartości biblioteki json.null.
local json = require("dkjson")
local t = { middle = json.null }
print(json.encode(t)) -- {"middle":null}Dziury w tablicach powodują problemy
Jeśli sekwencja zawiera lukę (na przykład indeks 2 ma wartość nil), Lua przestaje traktować ją jak zwykłą tablicę. Kodowanie może zakończyć się w miejscu luki lub działać nieprzewidywalnie.
Aby uzyskać przewidywalne tablice JSON, należy zachować kolejne indeksy tablicy, zaczynając od 1.
local json = require("dkjson")
local t = { [1] = "a", [3] = "c" } -- gap at 2
print(json.encode(t)) -- unreliableZapisywanie JSON w pliku
Aby utrwalić dane, należy zakodować tabelę do ciągu znaków i zapisać ten ciąg w pliku.
W ten sposób zapisuje się ustawienia, wyniki lub dowolny ustrukturyzowany stan aplikacji.
local json = require("dkjson")
local data = { theme = "dark", volume = 8 }
local f = io.open("settings.json", "w")
f:write(json.encode(data, { indent = true }))
f:close()Pusta tabela jest domyślnie obiektem
Pusta tabela Lua {} nie ma kluczy, dlatego dkjson domyślnie koduje ją jako pusty obiekt {}, a nie tablicę.
Jeśli potrzebna jest pusta tablica, dkjson pozwala oznaczyć tabelę odpowiednim znacznikiem; w przeciwnym razie typ jest niejednoznaczny.
local json = require("dkjson")
print(json.encode({})) -- {}Kolejność kluczy nie jest gwarantowana
Tabele Lua nie mają określonej kolejności kluczy tekstowych, dlatego kolejność pól w zakodowanym JSON może się zmieniać.
Nie należy polegać na kolejności pól; odbiorcy JSON powinni wyszukiwać klucze po nazwie, a nie po pozycji.
Spójność cyklu kodowania i dekodowania
Zakodowanie, a następnie zdekodowanie danych powinno dać równoważną tabelę. Taki cykl to dobry sposób na testowanie obsługi danych.
local json = require("dkjson")
local orig = { a = 1, list = { 2, 3 } }
local copy = json.decode(json.encode(orig))
print(copy.a, copy.list[2])Kodowanie za pomocą cjson
lua-cjson również udostępnia funkcję encode. Jest ona szybsza, ale oferuje mniej opcji formatowania i zgłasza błędy zamiast je zwracać.
W przypadku czytelnego wyniku z wcięciami dkjson jest zazwyczaj wygodniejszym wyborem.
local cjson = require("cjson")
local s = cjson.encode({ ok = true, n = 42 })
print(s)Szybki sprawdzian
Proszę sprawdzić, czy rozumieją Państwo kodowanie tabel Lua.
Podsumowanie
Kodowanie przekształca tabele Lua w ciągi JSON. Sekwencje indeksowane liczbami całkowitymi stają się tablicami, a tabele z kluczami tekstowymi stają się obiektami.
Proszę używać json.null dla wartości null, zachowywać ciągłość tablic i przekazywać indent = true, aby uzyskać czytelny wynik. Następnie zajmą się Państwo głęboko zagnieżdżonymi danymi.
Często zadawane pytania
Czy lekcja „Kodowanie tabel do JSON” jest bezpłatna?
Tak — pełny tekst „Kodowanie tabel do JSON” 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 Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Kodowanie tabel do JSON”?
Zserializuje Pan/Pani dane Lua. Ćwiczysz Lua 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ąć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua 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 3 z 4.
Ile czasu zajmuje lekcja „Kodowanie tabel do JSON”?
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 Lua Academy?
Tak. Każda lekcja Lua 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
- Dlaczego JSON
- Dekodowanie JSON do tabel
- Kodowanie tabel do JSON
- Obsługa zagnieżdżonych danych