週刊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ライフを