mirror https://github.com/sile/jsone

Takeru Ohta 3f1e356733 マルチバイト文字とascii文字が混在している場合にデコードが失敗していたのを修正 11 лет назад
doc 8861e5429b エンコード処理をCPSで書き直し 11 лет назад
src 3f1e356733 マルチバイト文字とascii文字が混在している場合にデコードが失敗していたのを修正 11 лет назад
test 3f1e356733 マルチバイト文字とascii文字が混在している場合にデコードが失敗していたのを修正 11 лет назад
.gitignore bff1c05ea2 first commit 11 лет назад
COPYING 8cfca951e7 Makefileやrebar.configなどを少し整理 11 лет назад
Makefile 8cfca951e7 Makefileやrebar.configなどを少し整理 11 лет назад
README.md 4260dfb1ab エスケープされていない文字のデコード処理を効率化 11 лет назад
rebar bff1c05ea2 first commit 11 лет назад
rebar.config 6e36665c67 rebar.configにnativeオプションが残ってしまっていたので除去 11 лет назад

README.md

jsone (0.2.2)

Erlangで実装されたJSONのエンコード/デコードライブラリ。

特徴

  • RFC4627準拠
  • 日本語を含む文字列に対応
    • ただし文字列はUTF-8のみをサポート
  • Pure Erlang
  • デコード処理部を実験的にCPS的に実装
    • パース途中にサブバイナリが生成されることを極力抑制して最適化
    • NIFを使わない実装の中ではおそらく最速

ビルド方法

ビルドツールにはrebarを使用している。

ビルド手順:

# ビルド
$ git clone git://github.com/sile/jsone.git
$ make init

# テスト & dialyzer 実行
$ make

# ロードパスに追加してErlangシェルを起動
$ make start
1> jsone:decode(<<"[1,2,3]">>).
[1,2,3]

使用例

%% デコード
> jsone:decode(<<"[1,2,3]">>).
[1,2,3]

> json:decode(<<"{\"1\":2}">>).
{[{<<"1">>,2}]}   % オブジェクトは {[Key, Value]} 形式にデコードされる

%% エンコード
> jsone:encode([1,2,3]).
<<"[1,2,3]">>

Erlangの型とJSONの対応

Erlang JSON
number 123 123
null null null
boolean true true
string <<"abc">> "abc"
array [1,2,3] [1,2,3]
object {[{<<"key">>, <<"value">>}]} {"key":"value"}

API

EDOCドキュメント

参考