Dekodowanie JSON do tabel
Sparsuje Pan/Pani napisy JSON.
Dekodowanie JSON do tabel to bezpłatna lekcja Lua 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 Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Podstawy dekodowania
Dekodowanie przekształca ciąg JSON w wartość Lua, z którą można pracować. Punktem wejścia jest json.decode(text).
Jeśli głównym elementem JSON jest obiekt, otrzymuje się tabelę Lua z kluczami tekstowymi; jeśli jest nim tablica, otrzymuje się tabelę z indeksami liczbowymi.
local json = require("dkjson")
local data = json.decode('{"id": 7}')
print(data.id)Odczytywanie pól obiektu
Zdekodowany obiekt JSON zachowuje się jak dowolna tabela Lua. Wartości można uzyskiwać za pomocą notacji kropkowej lub nawiasowej.
Klucze, które nie są prawidłowymi identyfikatorami Lua, na przykład zawierające spacje, wymagają składni nawiasowej.
local json = require("dkjson")
local u = json.decode('{"name": "Mia", "full name": "Mia Lee"}')
print(u.name)
print(u["full name"])Dekodowanie tablic
Tablica JSON jest dekodowana do tabeli sekwencyjnej Lua indeksowanej od 1. Można ją iterować za pomocą ipairs lub pętli numerycznej.
Należy pamiętać: tablice Lua zaczynają indeksowanie od 1, a nie od 0.
local json = require("dkjson")
local nums = json.decode('[10, 20, 30]')
for i, v in ipairs(nums) do
print(i, v)
endLiczby i wartości logiczne
Liczby JSON są dekodowane do liczb Lua, a wartości JSON true/false — do wartości logicznych Lua.
Po zdekodowaniu można używać ich bezpośrednio w działaniach arytmetycznych lub warunkach.
local json = require("dkjson")
local d = json.decode('{"qty": 3, "paid": false}')
if not d.paid then
print("unpaid, qty =", d.qty)
endObsługa null
JSON-owe null jest kłopotliwe, ponieważ Lua-owe nil usuwa klucz z tabeli. Biblioteki rozwiązują ten problem na różne sposoby.
dkjson dekoduje null do wartości wartownikowej json.null, dzięki czemu klucz nadal istnieje. Aby wykrywać wartości null, należy porównywać je z tą wartością.
local json = require("dkjson")
local d = json.decode('{"mid": null}')
if d.mid == json.null then
print("mid is null")
endDekodowanie z pliku
Często JSON znajduje się w pliku. Należy odczytać cały plik do ciągu znaków, a następnie go zdekodować.
Ten schemat jest często używany do wczytywania konfiguracji lub zapisanego stanu gry.
local json = require("dkjson")
local f = io.open("config.json", "r")
local text = f:read("*a")
f:close()
local cfg = json.decode(text)
print(cfg.theme)Trzy zwracane wartości
Funkcja decode biblioteki dkjson zwraca maksymalnie trzy wartości: zdekodowany wynik, pozycję, w której zakończono analizowanie, oraz komunikat błędu.
W przypadku powodzenia wynik jest różny od nil; w przypadku błędu ma wartość nil, a trzecia wartość wyjaśnia jego przyczynę.
local json = require("dkjson")
local obj, pos, err = json.decode('{"a":1}')
print(obj.a, pos, err)Walidowanie danych wejściowych
Nigdy nie należy ufać zewnętrznemu JSON-owi. Zawsze trzeba sprawdzić wynik przed użyciem, aby nieprawidłowy payload nie doprowadził do awarii programu.
local json = require("dkjson")
local function safeDecode(s)
local v, _, err = json.decode(s)
if not v then return nil, err end
return v
endRóżnice w cjson
lua-cjson działa podobnie, ale w przypadku nieprawidłowych danych zgłasza błąd zamiast go zwracać. Dla bezpieczeństwa należy opakować je w pcall.
cjson działa szybciej, co ma znaczenie przy analizowaniu dużych ilości danych.
local cjson = require("cjson")
local ok, data = pcall(cjson.decode, '{"x":1}')
if ok then print(data.x) else print("error") endBrakujące klucze mają wartość nil
Jeśli odczytany zostanie klucz, którego nie było w JSON-ie, Lua po prostu zwróci nil. Jest to normalne zachowanie i nie powoduje błędu.
Za pomocą or można użyć wartości zastępczej, aby zapewnić wartości domyślne dla opcjonalnych pól.
local json = require("dkjson")
local d = json.decode('{"name": "Sam"}')
local age = d.age or 0
print(d.name, age)Puste tabele są niejednoznaczne
Zarówno pusty obiekt JSON {}, jak i pusta tablica [] są dekodowane do pustej tabeli Lua. Po zdekodowaniu nie można stwierdzić, który z tych elementów był źródłem.
Ma to znaczenie głównie podczas ponownego kodowania; podczas konwersji w obie strony należy pamiętać o tej niejednoznaczności.
Szybkie sprawdzenie
Sprawdź, czego nauczyłeś się o dekodowaniu JSON.
Podsumowanie
Dekodowanie przekształca tekst JSON w tabele Lua: obiekty stają się tabelami z kluczami tekstowymi, a tablice — sekwencjami indeksowanymi od 1.
Zawsze należy walidować wynik, obsługiwać null za pomocą wartości wartownikowej biblioteki i pamiętać, że brakujące klucze mają po prostu wartość nil. Następnie zakodujemy tabele Lua z powrotem do JSON.
Często zadawane pytania
Czy lekcja „Dekodowanie JSON do tabel” jest bezpłatna?
Tak — pełny tekst „Dekodowanie JSON do tabel” 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 „Dekodowanie JSON do tabel”?
Sparsuje Pan/Pani napisy JSON. Ć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 2 z 4.
Ile czasu zajmuje lekcja „Dekodowanie JSON do tabel”?
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