diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+# 0.10.2
+* JSON support
+
+# 0.10.1
+* Update the "backend" dependency
+
 # 0.10.0 - Major overhaul
 * Transactions now are only retried in case of the "serialization_failure" (40001) error
 
diff --git a/hasql-postgres.cabal b/hasql-postgres.cabal
--- a/hasql-postgres.cabal
+++ b/hasql-postgres.cabal
@@ -1,7 +1,7 @@
 name:
   hasql-postgres
 version:
-  0.10.1
+  0.10.2
 synopsis:
   A "PostgreSQL" backend for the "hasql" library
 description:
@@ -81,6 +81,7 @@
     postgresql-binary == 0.5.*,
     postgresql-libpq == 0.9.*,
     -- data:
+    aeson >= 0.7 && < 0.9,
     uuid == 1.3.*,
     vector == 0.10.*,
     time >= 1.4 && < 1.6,
@@ -99,7 +100,7 @@
     loch-th == 0.2.*,
     placeholders == 0.1.*,
     -- general:
-    base-prelude >= 0.1.3 && < 0.2,
+    base-prelude >= 0.1.13 && < 0.2,
     base >= 4.5 && < 4.8
 
 
@@ -150,6 +151,7 @@
     quickcheck-instances == 0.3.*,
     QuickCheck == 2.7.*,
     -- data:
+    aeson,
     vector == 0.10.*,
     old-locale == 1.0.*,
     time >= 1.4 && < 1.6,
diff --git a/hspec/Main.hs b/hspec/Main.hs
--- a/hspec/Main.hs
+++ b/hspec/Main.hs
@@ -19,6 +19,7 @@
 import qualified Data.Scientific as Scientific
 import qualified Data.Vector as Vector
 import qualified PostgreSQLBinary.Encoder as PBE
+import qualified Data.Aeson as J
 
 
 type Text = Data.Text.Text
@@ -28,7 +29,11 @@
 type Scientific = Scientific.Scientific
 
 
-main = 
+main = do
+  version <-
+    fmap (fst . last . readP_to_S parseVersion . Data.Text.unpack) $
+    fmap (runIdentity . either (error . show) id) $
+    session1 $ H.tx Nothing $ H.singleEx [H.stmt| SHOW server_version |]
   hspec $ do
 
     describe "Feature" $ do
@@ -112,6 +117,14 @@
               [H.stmt|select oid, typname from pg_type|] :: Session [(Word, Text)]
 
     describe "Mapping of" $ do
+
+      when (version >= Version [9,2] []) $ describe "JSON" $ do
+
+        it "encodes and decodes" $ do
+          let v = (1, 'a') :: (Int, Char)
+              json = J.toJSON v
+              in flip shouldBe (Right (Identity json)) =<< do
+                   session1 $ H.tx Nothing $ H.singleEx [H.stmt| SELECT ($json :: json) |]
 
       describe "Enum" $ do
 
diff --git a/library/Hasql/Postgres.hs b/library/Hasql/Postgres.hs
--- a/library/Hasql/Postgres.hs
+++ b/library/Hasql/Postgres.hs
@@ -34,6 +34,7 @@
 import qualified Language.Haskell.TH as TH
 import qualified Data.Text.Encoding as Text
 import qualified Data.Vector as Vector
+import qualified Data.Aeson as J
 import qualified ListT
 
 
@@ -480,6 +481,14 @@
 -- |
 -- Maps to @uuid@.
 instance Bknd.CxValue Postgres UUID where
+  encodeValue = encodeValueUsingMapping
+  decodeValue = decodeValueUsingMapping
+
+-- |
+-- Maps to @json@.
+-- 
+-- Only works for PostgreSQL versions >= 9.2.
+instance Bknd.CxValue Postgres J.Value where
   encodeValue = encodeValueUsingMapping
   decodeValue = decodeValueUsingMapping
 
diff --git a/library/Hasql/Postgres/Mapping.hs b/library/Hasql/Postgres/Mapping.hs
--- a/library/Hasql/Postgres/Mapping.hs
+++ b/library/Hasql/Postgres/Mapping.hs
@@ -8,9 +8,11 @@
 import qualified Data.Vector as V
 import qualified Data.ByteString.Lazy as BL
 import qualified Data.Text.Lazy as TL
+import qualified Data.Text as T
 import qualified PostgreSQLBinary.Array as Array
 import qualified PostgreSQLBinary.Encoder as Encoder
 import qualified PostgreSQLBinary.Decoder as Decoder
+import qualified Data.Aeson as J
 
 
 -- |
@@ -263,7 +265,14 @@
         [|PTI.uuid|]
         [|const $ Encoder.uuid|]
         [|const $ Decoder.uuid|]
+      ,
+      (,,,)
+        [t|J.Value|]
+        [|PTI.json|]
+        [|const $ Encoder.bytea . Right . J.encode|]
+        [|const $ (>>= either (Left . T.pack) Right . J.eitherDecodeStrict) . Decoder.bytea|]
     ]
+
   in
     fmap concat $ forM settings $ \(t, pti, encoder, decoder) ->
       [d|
