     case JSONString
     case JSONNumber
     case JSONBool
+    case JSONStringOptional
+    case JSONNumberOptional
 }
 
 public extension JSONValue {

            if let dictionary = self.asDictionary() {
                
                for (key, value) in descriptionDictionary {
                    if dictionary[key] == nil || (dictionary[key] != nil && !dictionary[key]!.matchesDescription(value)) {
                        isValid = false
                    }
                }
                
            } else {

                return true
            }
            
        case let .JSONStringOptional:
            if self.isNull() || self.asString() != nil {
                return true
            }
            
        case let .JSONNumberOptional:
            if self.isNull() || self.asNumber() != nil {
                return true
            }
            
        case let .JSONDictionary(descriptionDictionary):
            
            var isValid = true
