     
     public var array: [Node]? {
         guard case let .ArrayValue(array) = self else { return nil }
-        return array
+        return array.map { $0 as Node }
     }
     
     public var object: [String : Node]? {
         guard case let .ObjectValue(object) = self else { return nil }
-        return object
-    }
-}
-
-extension String : Request.Data.Node {
+        var mapped: [String : Node] = [:]
+        object.forEach { key, val in
+            mapped[key] = val as Node
+        }
+        return mapped
+    }
+}
+
+extension String : Node {
     public var isNull: Bool {
         return self == "null"
     }


import PureJsonSerializer

extension Request {
    public struct Data {
        public protocol Node {
            public var isNull: Bool { get }
            public var boolValue: Bool? { get }
            public var floatValue: Float? { get }
            public var doubleValue: Double? { get }
            public var intValue: Int? { get }
            public var uintValue: UInt? { get }
            public var stringValue: String? { get }
            public var arrayValue: [Node]? { get }
            public var objectValue: [String : Node]? { get }
        }
        
        // MARK: Initialization
        

    }
}

extension Json : Node {
    public var isNull: Bool {
        switch self {
        case .NullValue:
