 extension Json: CustomStringConvertible {
     
     public var description: String {
+        if self.isNil {
+            return "nil"
+        }
         switch self.value {
-        case nil: return "nil"
         case let number as NSNumber: return number.description
         case let string as String: return string
-        case let array as [AnyObject]:
+        case let array as [Any?]:
             var result = "["
             var first = true
             for item in array {


extension Json: ExpressibleByArrayLiteral {
    
    public init(arrayLiteral elements: Any ...) {
        self.init(elements)
    }
}

extension Json: ExpressibleByDictionaryLiteral {
    
    public init(dictionaryLiteral elements: (String, Any) ...) {
        var dictionary = [String: Any](minimumCapacity: elements.count)
        for (key, value) in elements {
            dictionary[key] = Json.unwrap(value)

            }
            result += "]"
            return result
        case let dictionary as [String: Any]:
            var result = "["
            var first = true
            for (k, v) in dictionary {
