         return value
     }
     
-    subscript(index: Int) -> JSON {
+    public subscript(index: Int) -> JSON {
         get {
             switch value {
             case let .Array(array):

        }
    }
    
    init(value: JSONValue) {
        self.value = value
    }
    
    class func Null() -> JSON {
        return JSON(value: .Null)
    }
    
    class func Object() -> JSON {
        return JSON(value: .Object(NSDictionary()))
    }
    
    class func mutableObject() -> JSON {
        return JSON(value: .Object(NSMutableDictionary()))
    }
    
    class func Array() -> JSON {
        return JSON(value: .Array(NSArray()))
    }
    
    class func mutableArray() -> JSON {
        return JSON(value: .Array(NSMutableArray()))
    }
    
    subscript(key: String) -> JSON {
        get {
            switch value {
            case let .Object(dictionary):

        }
    }
    
    public subscript(keyPath: KeyPath) -> JSON {
        if keyPath.length == 0 { return JSON.null() }
        var value = self
        
        for key in keyPath.keys {
