diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,17 @@
-## [_Unreleased_](https://github.com/freckle/debug-print/compare/v0.2.0.1...main)
+## [_Unreleased_](https://github.com/freckle/debug-print/compare/v0.2.1.0...main)
+
+## [v0.2.1.0](https://github.com/freckle/debug-print/compare/v0.2.0.1...v0.2.1.0)
+
+Add instances for `aeson` types:
+
+- `instance ToDebugPrintValue Key`
+- `instance ToDebugPrintValue Value`
+- `instance ToDebugPrintValue Object`
+- `instance ToDebugPrintRecord Object`
+
+Adds `Eq` and `Ord` instances for `ToDebugPrintValue` and `ToDebugPrintRecord`
+
+Add `instance ToDebugPrintValue DebugPrintRecord`
 
 ## [v0.2.0.1](https://github.com/freckle/debug-print/compare/v0.2.0.0...v0.2.0.1)
 
diff --git a/debug-print.cabal b/debug-print.cabal
--- a/debug-print.cabal
+++ b/debug-print.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.0
 name:            debug-print
-version:         0.2.0.1
+version:         0.2.1.0
 license:         MIT
 license-file:    LICENSE
 maintainer:      Freckle Education
@@ -32,9 +32,9 @@
     autogen-modules:    Paths_debug_print
     default-language:   GHC2021
     default-extensions:
-        DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors
-        NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings
-        StrictData
+        DefaultSignatures DeriveAnyClass DerivingVia LambdaCase
+        NoFieldSelectors NoImplicitPrelude NoMonomorphismRestriction
+        OverloadedStrings StrictData
 
     ghc-options:
         -Weverything -Wno-all-missed-specialisations
@@ -59,9 +59,9 @@
     autogen-modules:    Paths_debug_print
     default-language:   GHC2021
     default-extensions:
-        DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors
-        NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings
-        StrictData
+        DefaultSignatures DeriveAnyClass DerivingVia LambdaCase
+        NoFieldSelectors NoImplicitPrelude NoMonomorphismRestriction
+        OverloadedStrings StrictData
 
     ghc-options:
         -Weverything -Wno-all-missed-specialisations
@@ -69,8 +69,10 @@
         -Wno-missing-safe-haskell-mode -Wno-safe -Wno-unsafe
 
     build-depends:
+        aeson >=2.1.2.1,
         base >=4.17.2.1 && <5,
         containers >=0.6.7,
+        scientific >=0.3.7.0,
         text >=2.0.2,
         vector >=0.13.1.0
 
@@ -85,9 +87,9 @@
     autogen-modules:    Paths_debug_print
     default-language:   GHC2021
     default-extensions:
-        DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors
-        NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings
-        StrictData
+        DefaultSignatures DeriveAnyClass DerivingVia LambdaCase
+        NoFieldSelectors NoImplicitPrelude NoMonomorphismRestriction
+        OverloadedStrings StrictData
 
     ghc-options:
         -Weverything -Wno-all-missed-specialisations
@@ -115,9 +117,9 @@
     autogen-modules:    Paths_debug_print
     default-language:   GHC2021
     default-extensions:
-        DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors
-        NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings
-        StrictData
+        DefaultSignatures DeriveAnyClass DerivingVia LambdaCase
+        NoFieldSelectors NoImplicitPrelude NoMonomorphismRestriction
+        OverloadedStrings StrictData
 
     ghc-options:
         -Weverything -Wno-all-missed-specialisations
diff --git a/internal/DebugPrint/Core.hs b/internal/DebugPrint/Core.hs
--- a/internal/DebugPrint/Core.hs
+++ b/internal/DebugPrint/Core.hs
@@ -11,12 +11,16 @@
 
 import Prelude
 
+import Data.Aeson qualified as Aeson
+import Data.Aeson.Key qualified as Aeson.Key
+import Data.Aeson.KeyMap qualified as Aeson.KeyMap
 import Data.Foldable (toList)
 import Data.Int
 import Data.Kind (Type)
 import Data.List.NonEmpty (NonEmpty)
 import Data.Map (Map)
 import Data.Map.Strict qualified as Map
+import Data.Scientific qualified as Scientific
 import Data.Sequence (Seq)
 import Data.String (IsString (..))
 import Data.Text (Text)
@@ -29,7 +33,7 @@
 import Numeric.Natural (Natural)
 
 newtype DebugPrintRecord = DebugPrintRecord (Map Text DebugPrintValue)
-  deriving newtype (Monoid, Semigroup)
+  deriving newtype (Eq, Monoid, Ord, Semigroup)
 
 data DebugPrintValue
   = DebugPrintValueInt Integer
@@ -37,6 +41,7 @@
   | DebugPrintValueBool Bool
   | DebugPrintValueVector (Vector DebugPrintValue)
   | DebugPrintValueRecord DebugPrintRecord
+  deriving stock (Eq, Ord)
 
 instance IsString DebugPrintValue where
   fromString = DebugPrintValueText . T.pack
@@ -52,6 +57,9 @@
 instance ToDebugPrintValue DebugPrintValue where
   toDebugPrintValue = id
 
+instance ToDebugPrintValue DebugPrintRecord where
+  toDebugPrintValue = DebugPrintValueRecord
+
 instance ToDebugPrintValue Integer where
   toDebugPrintValue = DebugPrintValueInt
 
@@ -94,6 +102,27 @@
 instance ToDebugPrintValue a => ToDebugPrintValue (Vector a) where
   toDebugPrintValue = DebugPrintValueVector . fmap toDebugPrintValue
 
+instance ToDebugPrintValue Aeson.Key where
+  toDebugPrintValue = DebugPrintValueText . Aeson.Key.toText
+
+instance ToDebugPrintValue Aeson.Value where
+  toDebugPrintValue = \case
+    Aeson.Object x -> DebugPrintValueRecord $ toDebugPrintRecord x
+    Aeson.Array x -> DebugPrintValueVector $ fmap toDebugPrintValue x
+    Aeson.String x -> DebugPrintValueText $ T.unwords ["(string)", x]
+    Aeson.Number x ->
+      -- Since JSON numbers support scientific notation, an exponential form may
+      -- represent an unreasonably large integer. Int64 is an arbitrary limit on
+      -- the size of integer we're willing to expand.
+      case Scientific.toBoundedInteger @Int64 x of
+        Just i -> DebugPrintValueInt $ toInteger i
+        Nothing -> DebugPrintValueText $ T.unwords ["(number)", T.pack $ show x]
+    Aeson.Bool x -> DebugPrintValueBool x
+    Aeson.Null -> DebugPrintValueText "(null)"
+
+instance ToDebugPrintValue Aeson.Object where
+  toDebugPrintValue = DebugPrintValueRecord . toDebugPrintRecord
+
 ---
 
 class ToDebugPrintRecord a where
@@ -104,6 +133,9 @@
 
 instance ToDebugPrintRecord DebugPrintRecord where
   toDebugPrintRecord = id
+
+instance ToDebugPrintRecord Aeson.Object where
+  toDebugPrintRecord = DebugPrintRecord . fmap toDebugPrintValue . Aeson.KeyMap.toMapText
 
 ---
 
