0Pricing
Lua Academy · Lekcja

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))               -- unreliable

Zapisywanie 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

  1. Dlaczego JSON
  2. Dekodowanie JSON do tabel
  3. Kodowanie tabel do JSON
  4. Obsługa zagnieżdżonych danych
← Powrót do Lua Academy