     }
 }
 
+public extension JSON {
+    public static func value<V: Outlaw.Value>(from data: Data) throws -> [V] {
+        let any = try JSONSerialization.jsonObject(with: data, options: [])
+        return try Array<V>.mappedValue(from: any)
+    }
+    
+    public static func value<V: Outlaw.Value>(from data: Data) -> [V]? {
+        return try? self.value(from: data)
+    }
+    
+    public static func value<K, V: Outlaw.Value>(from data: Data) throws -> [K: V] {
+        let any = try JSONSerialization.jsonObject(with: data, options: [])
+        return try Dictionary<K, V>.mappedValue(from: any)
+    }
+    
+    public static func value<K, V: Outlaw.Value>(from data: Data) -> [K: V]? {
+        return try? self.value(from: data)
+    }
+    
+    public static func value<V: Outlaw.Value>(from data: Data) throws -> Set<V> {
+        let any = try JSONSerialization.jsonObject(with: data, options: [])
+        return try Set<V>.mappedValue(from: any)
+    }
+    
+    public static func value<V: Outlaw.Value>(from data: Data) -> Set<V>? {
+        return try? self.value(from: data)
+    }
+}
+
 // MARK: -
 // MARK: InputStream
 

    }
}

// MARK: -
// MARK: URL


    }
}

public extension JSON {
    public static func value<V: Outlaw.Value>(from stream: InputStream) throws -> [V] {
        let any = try JSONSerialization.jsonObject(with: stream, options: [])
        return try Array<V>.mappedValue(from: any)
    }
    
    public static func value<V: Outlaw.Value>(from stream: InputStream) -> [V]? {
        return try? self.value(from: stream)
    }
    
    public static func value<K, V: Outlaw.Value>(from stream: InputStream) throws -> [K: V] {
        let any = try JSONSerialization.jsonObject(with: stream, options: [])
        return try Dictionary<K, V>.mappedValue(from: any)
    }
    
    public static func value<K, V: Outlaw.Value>(from stream: InputStream) -> [K: V]? {
        return try? self.value(from: stream)
    }
    
    public static func value<V: Outlaw.Value>(from stream: InputStream) throws -> Set<V> {
        let any = try JSONSerialization.jsonObject(with: stream, options: [])
        return try Set<V>.mappedValue(from: any)
    }
    
    public static func value<V: Outlaw.Value>(from stream: InputStream) -> Set<V>? {
        return try? self.value(from: stream)
    }
}

// MARK: -
// MARK: String

