diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,2 +1,39 @@
 # ast-monad-json
 A library for writing JSON
+
+## Example
+```Haskell
+{-# LANGUAGE OverloadedStrings #-}
+module Main where
+
+import Language.ASTMonad
+import Language.ASTMonad.Json
+import Language.ASTMonad.Json.Renderer
+import qualified Data.Text.Lazy.IO as TL
+import qualified Data.Text.Lazy.Builder as TB
+
+data Parameter = Parameter { px :: Int, py :: Int }
+
+jsonCode :: Json Parameter
+jsonCode = do
+  "id1" `is` "val1"
+  "id2" `is` "val2"
+  "flag" `isBool` True
+  "point" `isArray` do
+    x <- getParam px
+    y <- getParam py
+    "px" `isNum` x
+    "py" `isNum` y
+
+main :: IO ()
+main = do
+  let param = Parameter { px = 123, py = 456 }
+  TL.putStrLn $ TB.toLazyText $ renderJson $ buildAST jsonCode param JsonEnvironment
+```
+
+The execution result of the above code is
+
+```
+{"id1":"val1","id2":"val2","flag":true,"point":{"px":123,"py":456}}
+```
+
diff --git a/ast-monad-json.cabal b/ast-monad-json.cabal
--- a/ast-monad-json.cabal
+++ b/ast-monad-json.cabal
@@ -1,5 +1,5 @@
 name:                ast-monad-json
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            A library for writing JSON
 -- description:
 homepage:            https://github.com/mkdag/ast-monad-json#readme
@@ -26,9 +26,12 @@
   type:                exitcode-stdio-1.0
   hs-source-dirs:      test
   main-is:             Spec.hs
+  other-modules:       Language.ASTMonad.Json.RendererSpec
   build-depends:       base
                      , ast-monad
                      , ast-monad-json
+                     , text
+                     , hspec
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N
   default-language:    Haskell2010
 
diff --git a/test/Language/ASTMonad/Json/RendererSpec.hs b/test/Language/ASTMonad/Json/RendererSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Language/ASTMonad/Json/RendererSpec.hs
@@ -0,0 +1,32 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Language.ASTMonad.Json.RendererSpec
+  ( spec
+  ) where
+
+import Test.Hspec
+import Language.ASTMonad.Json
+import Language.ASTMonad.Json.Renderer
+import qualified Data.Text.Lazy as TL
+import qualified Data.Text.Lazy.Builder as TB
+
+f :: Json() -> TL.Text
+f jsonCode = TB.toLazyText $ renderJson $ buildAST jsonCode () JsonEnvironment
+
+spec :: Spec
+spec = do
+  describe "Language.ASTMonad.Json.Renderer.renderJson" $ do
+    context "when JsonString" $ do
+      it "should return \"str1\":\"str2\"" $ do
+        (f $ "id1" `is` "val1") `shouldBe` "{\"id1\":\"val1\"}"
+    context "when JsonNumber" $ do
+      it "should return \"str\":num" $ do
+        (f $ "num1" `isNum` 123) `shouldBe` "{\"num1\":123}"
+    context "when JsonBool" $ do
+      it "should return \"str\":true or \"str\":false" $ do
+        (f $ "flag" `isBool` True) `shouldBe` "{\"flag\":true}"
+        (f $ "flag" `isBool` False) `shouldBe` "{\"flag\":false}"
+    context "when JsonArray" $ do
+      it "should return \"str\":{..}" $ do
+        (f $ "array" `isArray` do
+            "id1" `is` "val1") `shouldBe` "{\"array\":{\"id1\":\"val1\"}}"
+    
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -1,2 +1,1 @@
-main :: IO ()
-main = putStrLn "Test suite not yet implemented"
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
