         indirect case Array(name: Swift.String?, values: [Value])
     }
 
+    lazy var numberScanningSet: NSCharacterSet = {
+        let symbolSet = NSMutableCharacterSet.decimalDigitCharacterSet()
+        symbolSet.addCharactersInString(".-")
+        return symbolSet
+    }()
+
+    lazy var stringScanningSet: NSCharacterSet = {
+        let symbolSet = NSMutableCharacterSet.alphanumericCharacterSet()
+        symbolSet.formUnionWithCharacterSet(NSCharacterSet.punctuationCharacterSet())
+        symbolSet.formUnionWithCharacterSet(NSCharacterSet.symbolCharacterSet())
+        symbolSet.formUnionWithCharacterSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
+        symbolSet.removeCharactersInString("\"")
+        return symbolSet
+    }()
+
     private func generateTokens() -> [Token] {
 
         func scanBeginObject() -> Token? {

        }

        func scanNull() -> Token? {
            if scanner.scanString("null", intoString: nil) {
                return .Null
            }


        func scanNumber() -> Token? {

            var string: NSString?

            if scanner.scanCharactersFromSet(numberScanningSet, intoString: &string) {

                if let string = string as? String {

