     case Unknow
 }
 
-//MARK:- Base
-//http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+// MARK: - JSON Base
+
 public struct JSON {
-    
-    public var type: Type {
-        get {
-            return _type
-        }
-        set {
-            _type = newValue
-        }
-    }
+
+    /**
+    Creates a JSON using the data.
+    
+    :param: data  The NSData used to convert to json.Top level object in data is an NSArray or NSDictionary
+    :param: opt   The JSON serialization reading options. `.AllowFragments` by default.
+    :param: error error The NSErrorPointer used to return the error. `nil` by default.
+    
+    :returns: The created JSON
+    */
+    public init(data:NSData, options opt: NSJSONReadingOptions = .AllowFragments, error: NSErrorPointer = nil) {
+        if let object: AnyObject = NSJSONSerialization.JSONObjectWithData(data, options: opt, error: error) {
+            self.init(object)
+        } else {
+            self.init(NSNull())
+        }
+    }
+    
+    /**
+    Creates a JSON using the object.
+    
+    :param: object  The object must have the following properties: All objects are NSString/String, NSNumber/Int/Float/Double/Bool, NSArray/Array, NSDictionary/Dictionary, or NSNull; All dictionary keys are NSStrings/String; NSNumbers are not NaN or infinity.
+    
+    :returns: The created JSON
+    */
+    public init(_ object: AnyObject) {
+        self.object = object
+    }
+
+    /// Private object
+    private var _object: AnyObject = NSNull()
+    /// Private type
+    private var _type: Type = .Null
+    /// prviate error
+    private var _error: NSError?
+
+    /// Object in JSON
     public var object: AnyObject {
         get {
             return _object

    }
}

//MARK: - Bool
extension JSON: BooleanType {
    
    //Optional bool

    }
}

// MARK: - String

extension JSON {

    //Optional string
