0Pricing
Lua Academy · レッスン

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 ready

2つの基本操作

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JSONを使う理由
  2. JSONをテーブルにデコードする
  3. テーブルをJSONにエンコードする
  4. 入れ子になったデータを扱う
← Lua Academyに戻る