誰が考えても似たようなことになると思いますが、次の2つを比較してみます。
- YAWS付属のjson.erl (http://yaws.hyber.org/)
- LShft社提供のrfc4627.erl (http://hg.opensource.lshift.net/erlang-rfc4627/)
YAWS版
JSON | Erlang |
---|---|
true, false, null | true, false, null(アトム) |
number | number() |
string | string()(文字リスト) |
array | {array, element_list()} |
object | {struct, proplist()} |
補足の型定義:
number()= integer() | float()
element_list() = [value()]
proplist() = [{key(), value()}]
key() = string() | atom()
value() = (true | false | null) |
number() |
string() |
{array, element_list()} |
{struct, proplist()}
LShift版
JSON | Erlang |
---|---|
true, false, null | true, false, null(アトム) |
number | number() |
string | binary() |
array | array() |
object | {obj, [{key(), value()}]} |
補足の型定義:
array() = [value()]
key() = binary() | atom()
value() = (true | false | null) |
number() |
binary() |
array() |
{obj, [{key(), value()}]}
比較
JSONの文字列を、Erlang側で文字リストにするかバイナリーにするかが一番の違いです。これは一長一短なのですが、Unicode文字(例えば日本語の文字)をUTF-8エンコーディングで扱うときはバイナリーのほうが有利かもしれません。