luaモジュールのcjsonモジュール-json解析
9267 ワード
lua jsonの解析とコンパイル
リファレンス lua-cjson-manual lua-cjson
概要(Synopsis)
モジュールインスタンス化(Module Instantiation) が投げ出す.
解析json文字列(decode) UTF-16およびUTF-32は、 をサポートしていません.
使用できない数字を復号する(decode_invalid_numbers) json仕様でサポートされていない数字を解析しようとすると、次のようにエラーが発生します. infinity not-a-number(NaN) hexadecimal
で使用可能な設定: です. とエラーが発生します.
このメソッドは呼び出すと現在の設定値を返す.
json文字列最大解析深さ(decode_max_depth) json文字列の最大埋め込み深さを設定し、この深さを超えるとエラーが投げ出され、スタックオーバーフローを防止する .の既定の深さは1000です.
エンコーディングは、次のタイプのjson列への変換をサポートします. boolean nil number string table lightuserdata(null value only)
残りは間違いを報告します. function lightuserdata(not null value) thread userdata
デフォルト値は、14ビット精度 を保持します.次の文字列に遭遇すると、エスケープされます. 制御文字 二重引用符 スラッシュおよび反スラッシュ 削除記号 次の状況に遭遇すると、エラーが発生します. json仕様に適合しない数字(infinity,NaN) 表ネスト1000層を超える 過剰疎lua配列
エンコーディング設定 encode_invalid_numbers true:符号化不可の値を許可する. null:Null値 として生成 false:エラー encode_keep_buffer true:キャッシュ符号化コンテンツ false: をキャッシュしない
encode_max_depth depth:数値、符号化最大ネスト深さ、デフォルト1000 encode_number_precision デジタル符号化精度:1-14、デフォルト14 encode_sparse_array
変数#ヘンスウ#
null
json文字列のnull値を解析するとcjsonとして解析する.null.判断時 に符号化される. に符号化される.
json列が生成されます. を生成する.
生成:
上と同じ:
最終的な結果は次のとおりです.
リファレンス
概要(Synopsis)
local cjson = require "cjson"
-- Module instantiation
--
local cjson2 = cjson.new()
local cjson_safe = require "cjson.safe"
-- Translate Lua value to/from JSON
text = cjson.encode(value)
value = cjson.decode(text)
-- Get and/or set Lua CJSON configuration
setting = cjson.decode_invalid_numbers([setting])
setting = cjson.encode_invalid_numbers([setting])
keep = cjson.encode_keep_buffer([keep])
depth = cjson.encode_max_depth([depth])
depth = cjson.decode_max_depth([depth])
convert, ratio, safe = cjson.encode_sparse_array([convert[, ratio[, safe]]])
モジュールインスタンス化(Module Instantiation)
local cjson = require "cjson"
local cjson2 = cjson.new()
local cjson_safe = require "cjson.safe"
cjson
復号/符号化時に不正なデータに遭遇するとエラーcjson_safe
はcjson
と同様であるが、不正なデータに遭遇した場合には、エラーを投げ出すことなくnil
とerror
に戻る.cjson.new()
は、独自の符号化バッファとデフォルト設定を有するインスタンスを作成する.解析json文字列(decode)
value = cjson.decode(json_text)
json_text = '[ true, { "foo": "bar" } ]'
value = cjson.decode(json_text)
-- Returns: { true, { foo = "bar" } }
使用できない数字を復号する(decode_invalid_numbers)
setting = cjson.decode_invalid_numbers([setting])
-- "setting" must be a boolean. Default: true.
true
:使用できない数値が解析されます.デフォルトはfalse
:使用できない数字に遭遇するとこのメソッドは呼び出すと現在の設定値を返す.
local in = cjson.decode_invalid_numbers(false)
--in is false
json文字列最大解析深さ(decode_max_depth)
depth = cjson.decode_max_depth([depth])
-- "depth" must be a positive integer. Default: 1000.
エンコーディング
json_text = cjson.encode(value)
value = { true, { foo = "bar" } }
json_text = cjson.encode(value)
-- Returns: '[true,{"foo":"bar"}]'
エンコーディング設定
cjson.encode({ [3] = "data" })
-- Returns: '[null,null,"data"]'
cjson.encode_sparse_array(true)
cjson.encode({ [1000] = "excessively sparse" })
-- Returns: '{"1000":"excessively sparse"}'
変数#ヘンスウ#
null
json文字列のnull値を解析するとcjsonとして解析する.null.判断時
if value == cjson.null then ... end
、lua_cjson
モジュールで使用可能なメソッドと変数cjson.encode_empty_table_as_object(true|false|"on"|"off")
のデフォルトはtrue
で、空のluaテーブルは空のjsonオブジェクト{}
に符号化され、false
に設定とjson配列[]
cjson.empty_array
lightuserdata
cjson.null
と同様に、この値は空のjson配列[]
local cjson = require "cjson"
local json = cjson.encode({
foo = "bar",
some_object = {},
some_array = cjson.empty_array
})
json列が生成されます.
{
"foo": "bar",
"some_object": {},
"some_array": []
}
setmetatable({}, cjson.array_mt)
テーブルはjsonの配列local t = { "hello", "world" }
setmetatable(t, cjson.array_mt)
cjson.encode(t) -- ["hello","world"]
生成:
local t = {}
t[1] = "one"
t[2] = "two"
t[4] = "three"
t.foo = "bar"
setmetatable(t, cjson.array_mt)
cjson.encode(t) -- ["one","two",null,"three"]
setmetatable({}, cjson.empty_array_mt)
は、テーブルを識別するために使用され、テーブルが空の場合、json配列が生成されます(無視されます).次の2つの場合は同じです.local function serialize(arr)
if #arr < 1 then
arr = cjson.empty_array
end
return cjson.encode({some_array = arr})
end
上と同じ:
local function serialize(arr)
setmetatable(arr, cjson.empty_array_mt)
return cjson.encode({some_array = arr})
end
最終的な結果は次のとおりです.
{
"some_array": []
}
encode_number_precision
cjsonデフォルト1-14
ビットが修正する、ここでは1-16
ビットとすることができる.