週刊Elixirライブラリ2015-6
Elixirのライブラリの解説を週ごとにお届けする記事です。
解説が間違っていた場合には、コメントか@hayabusa333にご連絡くださると嬉しいです。
今週はPoisonについて
# Poison is 何?
Poisonは高速性に焦点をあてたElixirのJSONライブラリです。
ElixirのJSONライブラリとして高速であるためにネイティヴコンパイル、hand-rolled パーサーやそのほかにも色々と裏で行っているようです。
# 実行環境
OS:OS X Yosemite
Erlang:Eshell V6.5, OTP-Version 18
Elixir:v1.0.4
# Poisonの実行を行うための新規プロジェクトの作成
$ mix new my_poison $ cd my_poison
# HexにてPoisonをインストールするために設定ファイルの記載を行う
$ vim mix.exs
mix.exsの内容は下記となります。
defmodule MyPoison.Mixfile do use Mix.Project def project do [app: :my_poison, version: "0.0.1", elixir: "~> 1.0", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps] end # Configuration for the OTP application # # Type `mix help compile.app` for more information def application do [applications: [:logger]] end # Dependencies can be Hex packages: # # {:mydep, "~> 0.3.0"} # # Or git/path repositories: # # {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"} # # Type `mix help deps` for more examples and options defp deps do [{:poison, "~> 1.4.0"}] end end
# 依存関係の解決を行います。
$ mix deps.get $ mix deps.compile
# Poisonを実際に使ってみてる
Poisonを実際に使ってみましょう。
今回はPoisonのGithubに記載されている例題を実行してみます。
$ iex -S mix iex(1)> Poison.Parser.parse!(~s({"name": "Devin Torres", "age": 27})) %{"age" => 27, "name" => "Devin Torres"}
一度、iex を終了し、再度起動しなおします
$ iex -S mix iex(1)> defmodule Person do ...(1)> defstruct [:name, :age] ...(1)> end iex(2)> Poison.Parser.parse!(~s({"name": "Devin Torres", "age": 27}), keys: :atoms!) %{age: 27, name: "Devin Torres"} iex(3)> Poison.decode!(~s({"name": "Devin Torres", "age": 27}), as: Person) %Person{age: 27, name: "Devin Torres"} iex(4)> Poison.decode!(~s({"people": [{"name": "Devin Torres", "age": 27}]}), ...(4)> as: %{"people" => [Person]}) %{"people" => [%Person{age: 27, name: "Devin Torres"}]}
# まとめ
今回はJSONライブラリであるPoisonをご紹介させていただきました。
JSONライブラリですので、実際にjson形式のファイルの読み込みなどもできればよかったのですが、そちらに関しましては別途記事を書きたいと思います。
それでは皆さま、良いElixirライフを