diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+0.5.8
+	* Add Aeson instances.
+
 0.5.7:
 	* Fix haddock problem.
 0.5.6:
diff --git a/path.cabal b/path.cabal
--- a/path.cabal
+++ b/path.cabal
@@ -1,5 +1,5 @@
 name:                path
-version:             0.5.7
+version:             0.5.8
 synopsis:            Support for well-typed paths
 description:         Support for will-typed paths.
 license:             BSD3
@@ -21,12 +21,14 @@
                    , filepath
                    , template-haskell
                    , deepseq
+                   , aeson
 
 test-suite test
     type: exitcode-stdio-1.0
     main-is: Main.hs
     hs-source-dirs: test
     build-depends: HUnit
+                 , aeson
                  , base
                  , hspec
                  , mtl
diff --git a/src/Path.hs b/src/Path.hs
--- a/src/Path.hs
+++ b/src/Path.hs
@@ -12,6 +12,7 @@
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE EmptyDataDecls #-}
+{-# LANGUAGE FlexibleInstances #-}
 
 module Path
   (-- * Types
@@ -49,6 +50,8 @@
 
 import           Control.Exception (Exception)
 import           Control.Monad.Catch (MonadThrow(..))
+import           Data.Aeson (FromJSON (..))
+import qualified Data.Aeson.Types as Aeson
 import           Data.Data
 import           Data.List
 import           Data.Maybe
@@ -70,6 +73,31 @@
 
 -- | A directory path.
 data Dir deriving (Typeable)
+
+instance FromJSON (Path Abs File) where
+  parseJSON = parseJSONWith parseAbsFile
+  {-# INLINE parseJSON #-}
+
+instance FromJSON (Path Rel File) where
+  parseJSON = parseJSONWith parseRelFile
+  {-# INLINE parseJSON #-}
+
+instance FromJSON (Path Abs Dir) where
+  parseJSON = parseJSONWith parseAbsDir
+  {-# INLINE parseJSON #-}
+
+instance FromJSON (Path Rel Dir) where
+  parseJSON = parseJSONWith parseRelDir
+  {-# INLINE parseJSON #-}
+
+parseJSONWith :: (Show e, FromJSON a)
+              => (a -> Either e b) -> Aeson.Value -> Aeson.Parser b
+parseJSONWith f x =
+  do fp <- parseJSON x
+     case f fp of
+       Right p -> return p
+       Left e -> fail (show e)
+{-# INLINE parseJSONWith #-}
 
 -- | Exception when parsing a location.
 data PathParseException
diff --git a/src/Path/Internal.hs b/src/Path/Internal.hs
--- a/src/Path/Internal.hs
+++ b/src/Path/Internal.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 
 -- | Internal types and functions.
@@ -7,6 +8,7 @@
   where
 
 import Control.DeepSeq (NFData (..))
+import Data.Aeson (ToJSON (..))
 import Data.Data
 
 -- | Path of some base and type.
@@ -47,3 +49,11 @@
 
 instance NFData (Path b t) where
   rnf (Path x) = rnf x
+
+instance ToJSON (Path b t) where
+  toJSON (Path x) = toJSON x
+  {-# INLINE toJSON #-}
+#if MIN_VERSION_aeson(0,10,0)
+  toEncoding (Path x) = toEncoding x
+  {-# INLINE toEncoding #-}
+#endif
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 -- | Test suite.
 
@@ -6,8 +7,8 @@
 
 import Control.Applicative
 import Control.Monad
+import Data.Aeson
 import Data.Maybe
-import Data.Monoid
 import Path
 import Path.Internal
 import Test.Hspec
@@ -29,6 +30,7 @@
      describe "Operations: parent" operationParent
      describe "Operations: filename" operationFilename
      describe "Restrictions" restrictions
+     describe "Aeson Instances" aesonInstances
 
 -- | Restricting the input of any tricks.
 restrictions :: Spec
@@ -214,12 +216,22 @@
 parserTest parser input expected =
   it ((case expected of
          Nothing -> "Failing: "
-         Just{} -> "Succeeding: ") <>
-      "Parsing " <>
-      show input <>
-      " " <>
+         Just{} -> "Succeeding: ") ++
+      "Parsing " ++
+      show input ++
+      " " ++
       case expected of
         Nothing -> "should fail."
-        Just x -> "should succeed with: " <> show x)
+        Just x -> "should succeed with: " ++ show x)
      (actual == expected)
   where actual = parser input
+
+-- | Tests for the 'ToJSON' and 'FromJSON' instances
+aesonInstances :: Spec
+aesonInstances =
+  do it "Decoding \"[\"/foo/bar\"]\" as a [Path Abs Dir] should succeed." $
+       eitherDecode "[\"/foo/bar\"]" `shouldBe` Right [Path "/foo/bar/" :: Path Abs Dir]
+     it "Decoding \"[\"/foo/bar\"]\" as a [Path Rel Dir] should fail." $
+       decode "[\"/foo/bar\"]" `shouldBe` (Nothing :: Maybe [Path Rel Dir])
+     it "Encoding \"[\"/foo/bar/mu.txt\"]\" should succeed." $
+       encode [Path "/foo/bar/mu.txt" :: Path Abs File] `shouldBe` "[\"/foo/bar/mu.txt\"]"
