0Pricing
Lua Academy · Lekcja

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

Liczby 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)
end

Obsł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")
end

Dekodowanie 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
end

Róż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") end

Brakują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

  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