         return accumulator
     }
     
-    public func JSONValueForKey<A: JSONValueType>(key: Key) throws -> A {
+    public func valueForKey<A: JSONValue>(key: String) throws -> A {
         let any = try anyForKey(key)
         guard let result = try A.JSONValue(any) as? A else {
             throw JSONError.TypeMismatchWithKey(key: key, expected: A.self, actual: any.dynamicType)

    }
}

extension Dictionary: JSONValueType {
    public static func JSONValue(object: Any) throws -> [Key: Value] {
        guard let objectValue = object as? [Key: Value] else {
            throw JSONError.TypeMismatch(expected: self, actual: object.dynamicType)

            throw error
        }
    }
}

extension JSONObject: CustomStringConvertible {
    public var description: String {
        return dictionary.description
    }
}

extension JSONObject: CustomDebugStringConvertible {
    public var debugDescription: String {
        return dictionary.debugDescription
    }
}