概要
Nginx + Lua スクリプト内で JSON 情報を扱うために lua-resty-libcjson というライブラリを追加してみました
環境
- CentOS 6.7 64bit Final
- LuaJIT 2.0.4
- ngx devel kit 0.2.19
- lua-nginx-module 0.9.19
- nginx 1.9.3
- lua-resty-libcjson 5260553b26a264c1cfb27bcd1b9c28d117f05b8f
- cJSON 67d3c7fbc705e82e97baf22d35aa8abfddbe2d3e
インストール
lua-resty-libcjson のインストール
まずは Lua スクリプト用のライブラリをインストールします
- cd /usr/local/openresty/lualib/resty
- git clone https://github.com/bungle/lua-resty-libcjson.git
- mv lua-resty-libcjson/lib/resty/libcjson* .
- rm -rf lua-resty-libcjson/
Lua のライブラリは /usr/local/openresty/lualib/resty
にインストールしていますが、お好きなところにインストールして OK です
cJSON のインストール
cJSON とはその名の通り C/C++ で JSON を扱えるようにするためのライブラリです
ソースをダウンロードしてコンパイルして共有ライブラリ ( .so ) ファイルを作成する必要があります
- cd ~/work
- git clone https://github.com/kbranigan/cJSON.git
- cd cJSON
- gcc cJSON.c -O3 -o libcjson.so -shared -fPIC
- cp libcjson.so /usr/local/lib/
共有ライブラリのパスはすでに通っているパスに配置してください
独自のパスに配置した場合は ldconfig 等を使ってパスを通してから Nginx を起動してください
サンプル
- json_sample.lua
local p = "/usr/local/openresty/lualib/"
local m_package_path = package.path
package.path = string.format("%s?.lua;%s?/init.lua;%s", p, p, m_package_path)
local json = require "resty.libcjson"
local str = json.encode({key = "value"}, false)
ngx.log(ngx.ERR, str)
- ログ
- tail -f /opt/nginx/logs/error.log
2015/12/18 12:23:39 [error] 11875#0: *1 [lua] json_sample.lua:47: main(): {“key”:”value”}, client: 127.0.0.1, server: localhost, request: “GET /hoge HTTP/1.1”, host: “localhost”
テーブル情報を JSON 文字列に変換するサンプルです
はじめに lua-resty-libcjson を配置したパスを package.path に追加します
追加に成功していれば require してライブラリを読み込みます
パスがうまく通っていない場合、require に失敗します
テーブルから JSON の文字列を取得するには json.encode
を使用します
第一引数にテーブル情報を与えて第二引数には JSON をフォーマットするかの boolean を与えます
true を指定すると改行コードやタブ文字が入った情報が取得できます
JSON 文字列からテーブル情報を取得する場合は json.decode
を使用してください
0 件のコメント:
コメントを投稿