       try $0.map(withRootKey: rootKey)
     }
   }
+
+  func mapArray<T: Decodable where T == T.DecodedType>(
+    type: T.Type,
+    withRootKey rootKey: String
+  ) -> Observable<[T]>{
+    return map {
+      try $0.mapArray(withRootKey: rootKey)
+    }
+  }
 }

  ///
  ///  - parameter rootKey: Key in json
  ///
  ///  - throws: Decoding failure message
  ///
  ///  - returns: Transformed data from response
  func map<T: Decodable where T == T.DecodedType>(withRootKey rootKey: String) throws -> T {
    let json = try mapJSON()
    let dict = json as? [String: AnyObject] ?? [:]
    let decoded: Decoded<T> = decode(dict, rootKey: rootKey)

    return try decodedValue(decoded)
  }

  ///  Extract the value from `Decoded` context
  ///
  ///  - parameter decoded: `Decoded`
  ///
  ///  - throws: Decoding failure message
  ///
  ///  - returns: Extracted value
  private func decodedValue<T: Decodable where T == T.DecodedType>(
    decoded: Decoded<T>
  ) throws -> T {
    switch decoded {
    case .Success(let value):
      return value

extension Response {
  ///  Transform response data to a type.
  ///
  ///  - throws: Decoding error message
  ///
  ///  - returns: Transformed data from response
  func map<T: Decodable where T == T.DecodedType>() throws -> T {
