JSONを使う理由
データ交換の基本を学びます。
「JSONを使う理由」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
JSONとは
JSON(JavaScript Object Notation)は、データの保存や交換に使う軽量なテキスト形式です。人間が読みやすく、特定の言語に依存しません。
ほとんどすべてのWeb API、設定ファイル、データベースがJSONを扱います。JSONとLuaテーブルの相互変換を学ぶと、スクリプトから外部の世界とやり取りできるようになります。
JSONはLuaに似ている
JSONのオブジェクトはキーと値の組を波括弧で表し、配列は角括弧で表します。これはLuaテーブルにほぼそのまま対応します。
JSONオブジェクトは文字列キーを持つLuaテーブルになり、JSON配列は1から始まる数値インデックスを持つLuaテーブルになります。
-- JSON text
-- {"name": "Ada", "age": 36}
-- Equivalent Lua table
local person = { name = "Ada", age = 36 }
print(person.name)Luaには組み込みJSON機能がない
一部の言語とは異なり、標準のLuaにはJSONのサポートが組み込まれていません。ライブラリを使う必要があります。
代表的な選択肢は、純粋なLuaでインストールしやすい dkjson と、高速なCライブラリである lua-cjson です。どちらも encode と decode の関数を提供します。
JSONライブラリを読み込む
JSONライブラリは、ほかのLuaモジュールと同じように require で読み込みます。返されるテーブルに、必要な関数が格納されています。
ここでは dkjson を読み込み、json という名前のローカル変数に割り当てています。
local json = require("dkjson")
-- now json.encode and json.decode are ready2つの基本操作
JSONに対して行う操作は、基本的に decode と encode の2つだけです。
デコード はJSON文字列を読み取れるLuaテーブルに変換します。エンコード はLuaテーブルを、送信や保存ができるJSON文字列に戻します。
local json = require("dkjson")
local t = json.decode('{"ok": true}') -- string -> table
local s = json.encode(t) -- table -> stringデコードの例
ファイルやAPIからJSONテキストを受け取ったら、json.decode で扱いやすいLuaテーブルに解析できます。
デコードした後は、通常のLua構文でフィールドにアクセスします。
local json = require("dkjson")
local text = '{"city": "Oslo", "temp": 7}'
local data = json.decode(text)
print(data.city, data.temp)エンコードの例
JSONを作成するには、Luaテーブルに値を設定して json.encode に渡します。返される文字列は、そのまま書き込んだり送信したりできます。
local json = require("dkjson")
local book = { title = "Lua", pages = 328 }
local text = json.encode(book)
print(text)JSONのデータ型
JSONがサポートする型は、文字列、数値、真偽値、null、オブジェクト、配列です。
Luaでは、これらは文字列、数値、真偽値、nil、テーブルに対応します。ただし、JSONの null に完全に対応するLuaの値はないため、予想外の動作につながることがあります。
独自形式よりJSONを使う理由
独自のテキスト形式を考案することもできますが、JSONならすでにどこでも扱えます。エディターで構文を強調表示でき、バリデーターで検証でき、ほかの言語でもすぐに解析できます。
JSONを使うと、データの移植性が高まり、コードのデバッグも容易になります。
よくある利用場面
REST APIの呼び出し、設定ファイルの読み込み、結果のキャッシュ、プロセス間のデータ受け渡しには、JSONを使うことになります。
どの場合も基本的な流れは同じです。受け取ったJSONをテーブルにデコードし、そのデータを処理して、必要になったら再びエンコードして送信します。
local json = require("dkjson")
-- typical round trip
local data = json.decode(incoming)
data.seen = true
local out = json.encode(data)デコードエラーを処理する
テキストが有効なJSONでない場合、デコードに失敗することがあります。dkjson はクラッシュする代わりに、値、位置、エラーメッセージを返します。
使用する前に、必ず最初の戻り値が nil かどうかを確認してください。
local json = require("dkjson")
local data, pos, err = json.decode("{bad")
if not data then
print("Invalid JSON:", err)
end理解度チェック
LuaにおけるJSONの基本を理解できているか確認しましょう。
まとめ
JSONは、Luaテーブルにきれいに対応する汎用的なデータ形式です。標準のLuaにはJSONのサポートがないため、dkjson や cjson のようなライブラリを読み込みます。
基本操作は json.decode(文字列からテーブルへの変換)と json.encode(テーブルから文字列への変換)です。次は、JSONをテーブルにデコードする方法を詳しく学びます。
よくある質問
「JSONを使う理由」レッスンは無料ですか?
はい。「JSONを使う理由」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「JSONを使う理由」で何を学びますか?
データ交換の基本を学びます。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「JSONを使う理由」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。