module Text.HJson.Pretty (toString) where import Data.List import qualified Data.Map as Map import qualified Text.HJson as JSON import Text.HJson (Json(..)) -- | Pretty-prints JSON with given indenter toString :: String -> Json -> String toString s j = toString' s 0 j toString' :: String -> Integer -> Json -> String toString' indenter levels (JArray xs) = "[" ++ (intercalate ", " $ map (toString' indenter levels) xs) ++ "]" toString' indenter levels (JObject mp) = let currentIndent = (concat (genericReplicate levels indenter)) in intercalate "\n" $ ["{", intercalate ",\n" (map (((currentIndent ++ indenter) ++) . (\(key, value) -> toString' indenter levels (JString key) ++ ": " ++ toString' indenter (levels + 1) value)) $ Map.toList mp), currentIndent ++ "}"] toString' _ _ a = JSON.toString a