         }
     }
     
-    var count: Int {
+    public var count: Int {
         switch value {
         case let .Object(dictionary):
             return dictionary.count

        }
    }
    
    func remove(key: String) {
        switch value {
        case let .Object(dictionary):
            switch dictionary {

        }
    }
    
    public func format(# options: NSJSONWritingOptions, error: NSErrorPointer) -> NSData? {
        var obj: AnyObject!
        
        switch value {
        case let .Array(array):
            obj = array
        case let .Object(object):
            obj = object
        case let .Number(number):
            obj = number
        case let .String(string):
            obj = string
        case .Null:
            obj = NSNull()
        }

        return NSJSONSerialization.dataWithJSONObject(obj, options: options, error: error)
    }
    
    public init(value: JSONValue) {
        self.value = value
    }
    
    public class func null() -> JSON {
        return JSON(value: .Null)
    }
    
    public class func object() -> JSON {
        return JSON(value: .Object(NSMutableDictionary()))
    }
    
    public class func array() -> JSON {
        return JSON(value: .Array(NSMutableArray()))
    }
    
    public var description: String {
        switch value {
        case let .Array(array):
            return array.description
        case let .Object(object):
            return object.description
        case let .Number(number):
            return number.description
        case let .String(string):
            return string.description
        case .Null:
            return "null"
        }
    }
    
    public subscript(key: String) -> JSON {
        get {
            switch value {
            case let .Object(dictionary):
