このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

Erlang実験室:JSONデータのErlang表現

誰が考えても似たようなことになると思いますが、次の2つを比較してみます。

  1. YAWS付属のjson.erl (http://yaws.hyber.org/
  2. 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エンコーディングで扱うときはバイナリーのほうが有利かもしれません。