2015年12月18日金曜日

lua-resty-libcjson をインストール

概要

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 スクリプト用のライブラリをインストールします

Lua のライブラリは /usr/local/openresty/lualib/resty にインストールしていますが、お好きなところにインストールして OK です

cJSON のインストール

cJSON とはその名の通り C/C++ で JSON を扱えるようにするためのライブラリです
ソースをダウンロードしてコンパイルして共有ライブラリ ( .so ) ファイルを作成する必要があります

共有ライブラリのパスはすでに通っているパスに配置してください
独自のパスに配置した場合は 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 件のコメント:

コメントを投稿