0001 // 0002 // Json.swift 0003 // JsonSerializer 0004 // 0005 // Created by Fuji Goro on 2014/09/15. 0006 // Copyright (c) 2014 Fuji Goro. All rights reserved. 0007 // 0008 0009 public enum Json: CustomStringConvertible, CustomDebugStringConvertible, Equatable { 0010 0011 case NullValue
Json.swift:15 case ArrayValue([Json])Json.swift:16 case ObjectValue([String:Json])Json.swift:32 public init(_ value: [Json]) {Json.swift:36 public init(_ value: [String : Json]) {Json.swift:42 public static func from(value: Bool) -> Json {Json.swift:46 public static func from(value: Double) -> Json {Json.swift:50 public static func from(value: String) -> Json {Json.swift:54 public static func from(value: [Json]) -> Json {Json.swift:54 public static func from(value: [Json]) -> Json {Json.swift:58 public static func from(value: [String : Json]) -> Json {Json.swift:58 public static func from(value: [String : Json]) -> Json {Json.swift:65 extension Json {Json.swift:66 public static func deserialize(source: String) throws -> Json {Json.swift:70 public static func deserialize(source: [UInt8]) throws -> Json {Json.swift:74 public static func deserialize<ByteSequence: CollectionType where ByteSequence.Generator.Element == UInt8>(sequence: ByteSequence) throws -> Json {Json.swift:79 extension Json {Json.swift:101 extension Json {Json.swift:155 public var arrayValue: [Json]? {Json.swift:160 public var objectValue: [String : Json]? {Json.swift:166 extension Json {Json.swift:187 extension Json {Json.swift:197 extension Json {Json.swift:204 public func ==(lhs: Json, rhs: Json) -> Bool {Json.swift:204 public func ==(lhs: Json, rhs: Json) -> Bool {Json.swift:228 extension Json: NilLiteralConvertible {Json.swift:234 extension Json: BooleanLiteralConvertible {Json.swift:240 extension Json: IntegerLiteralConvertible {Json.swift:246 extension Json: FloatLiteralConvertible {Json.swift:252 extension Json: StringLiteralConvertible {Json.swift:269 extension Json: ArrayLiteralConvertible {Json.swift:270 public init(arrayLiteral elements: Json...) {Json.swift:275 extension Json: DictionaryLiteralConvertible {Json.swift:276 public init(dictionaryLiteral elements: (String, Json)...) {Json.swift:277 var object = [String : Json](minimumCapacity: elements.count)JsonParser.swift:62 internal func deserialize() throws -> Json {JsonParser.swift:73 private func deserializeNextValue() throws -> Json {JsonParser.swift:81 return try parseSymbol("null", Json.NullValue)JsonParser.swift:83 return try parseSymbol("true", Json.BooleanValue(true))JsonParser.swift:85 return try parseSymbol("false", Json.BooleanValue(false))JsonParser.swift:99 private func parseSymbol(target: StaticString, @autoclosure _ iftrue: () -> Json) throws -> Json {JsonParser.swift:99 private func parseSymbol(target: StaticString, @autoclosure _ iftrue: () -> Json) throws -> Json {JsonParser.swift:107 private func parseString() throws -> Json {JsonParser.swift:175 private func parseNumber() throws -> Json {JsonParser.swift:237 private func parseObject() throws -> Json {JsonParser.swift:244 private func getObject() throws -> Json {JsonParser.swift:249 var object = [String:Json]()JsonParser.swift:279 private func parseArray() throws -> Json {JsonParser.swift:284 var a = Array<Json>()JsonSerializer.swift:11 func serialize(_: Json) -> StringJsonSerializer.swift:18 internal func serialize(json: Json) -> String {JsonSerializer.swift:43 func serializeArray(array: [Json]) -> String {JsonSerializer.swift:51 func serializeObject(object: [String : Json]) -> String {JsonSerializer.swift:72 override internal func serializeArray(array: [Json]) -> String {JsonSerializer.swift:90 override internal func serializeObject(object: [String : Json]) -> String {0012 case BooleanValue
Json.swift:103 guard case .NullValue = self else { return false }Json.swift:206 case .NullValue:Json.swift:230 self = .NullValueJsonParser.swift:81 return try parseSymbol("null", Json.NullValue)JsonSerializer.swift:20 case .NullValue:(Bool) 0013 case NumberValue
Json.swift:21 self = .BooleanValue(value)Json.swift:43 return .BooleanValue(value)Json.swift:108 if case let .BooleanValue(bool) = self {Json.swift:208 case .BooleanValue(let lhsValue):Json.swift:236 self = .BooleanValue(value)JsonParser.swift:83 return try parseSymbol("true", Json.BooleanValue(true))JsonParser.swift:85 return try parseSymbol("false", Json.BooleanValue(false))JsonSerializer.swift:22 case .BooleanValue(let b):(Double) 0014 case StringValue
Json.swift:25 self = .NumberValue(value)Json.swift:47 return .NumberValue(value)Json.swift:127 guard case let .NumberValue(double) = self else {Json.swift:135 guard case let .NumberValue(double) = self where double % 1 == 0 else {Json.swift:214 case .NumberValue(let lhsValue):Json.swift:242 self = .NumberValue(Double(value))Json.swift:248 self = .NumberValue(Double(value))JsonParser.swift:234 return .NumberValue(sign * (Double(integer) + fraction) * pow(10, Double(exponent)))JsonSerializer.swift:24 case .NumberValue(let n):(String) 0015 case ArrayValue
Json.swift:29 self = .StringValue(value)Json.swift:51 return .StringValue(value)Json.swift:148 guard case let .StringValue(string) = self else {Json.swift:211 case .StringValue(let lhsValue):Json.swift:257 self = .StringValue(value)Json.swift:261 self = .StringValue(value)Json.swift:265 self = .StringValue(value)JsonParser.swift:146 return .StringValue(string)JsonParser.swift:252 guard case let .StringValue(key) = try deserializeNextValue() else {JsonSerializer.swift:26 case .StringValue(let s):([Json]) 0016 case ObjectValue
Json.swift:33 self = .ArrayValue(value)Json.swift:55 return .ArrayValue(value)Json.swift:156 guard case let .ArrayValue(array) = self else { return nil }Json.swift:217 case .ArrayValue(let lhsValue):Json.swift:271 self = .ArrayValue(elements)JsonParser.swift:302 return .ArrayValue(a)JsonSerializer.swift:28 case .ArrayValue(let a):([String:Json]) 0017 0018 // MARK: Initialization 0019 0020 public init(_ value: Bool) { 0021 self = .BooleanValue(value) 0022 } 0023 0024 public init(_ value: Double) { 0025 self = .NumberValue(value) 0026 } 0027 0028 public init(_ value: String) { 0029 self = .StringValue(value) 0030 } 0031 0032 public init(_ value: [Json]) { 0033 self = .ArrayValue(value) 0034 } 0035 0036 public init(_ value: [String : Json]) { 0037 self = .ObjectValue(value) 0038 } 0039 0040 // MARK: From 0041 0042 public static func from(value: Bool) -> Json { 0043 return .BooleanValue(value) 0044 } 0045 0046 public static func from(value: Double) -> Json { 0047 return .NumberValue(value) 0048 } 0049 0050 public static func from(value: String) -> Json { 0051 return .StringValue(value) 0052 } 0053 0054 public static func from(value: [Json]) -> Json { 0055 return .ArrayValue(value) 0056 } 0057 0058 public static func from
Json.swift:37 self = .ObjectValue(value)Json.swift:59 return .ObjectValue(value)Json.swift:161 guard case let .ObjectValue(object) = self else { return nil }Json.swift:220 case .ObjectValue(let lhsValue):Json.swift:281 self = .ObjectValue(object)JsonParser.swift:276 return .ObjectValue(object)JsonSerializer.swift:30 case .ObjectValue(let o):(value: [String : Json]) -> Json { 0059 return .ObjectValue(value) 0060 } 0061 } 0062 0063 // MARK: Serialization 0064 0065 extension Json { 0066 public static func deserialize(source: String) throws -> Json { 0067 return try JsonDeserializer(source.utf8).deserialize() 0068 } 0069 0070 public static func deserialize(source: [UInt8]) throws -> Json { 0071 return try JsonDeserializer(source).deserialize() 0072 } 0073 0074 public static func deserialize<ByteSequence: CollectionType where ByteSequence.Generator.Element == UInt8>(sequence: ByteSequence) throws -> Json { 0075 return try JsonDeserializer(sequence).deserialize() 0076 } 0077 } 0078 0079 extension Json { 0080 public enum SerializationStyle
Json.swift:182 self = .from(mutableObject){ 0081 case Default
Json.swift:94 public func serialize(style: SerializationStyle = .Default) -> String {0082 case PrettyPrint
Json.swift:86 case .Default:Json.swift:94 public func serialize(style: SerializationStyle = .Default) -> String {0083 0084 private var serializer
Json.swift:88 case .PrettyPrint:: JsonSerializer.Type { 0085 switch self { 0086 case .Default: 0087 return DefaultJsonSerializer.self 0088 case .PrettyPrint: 0089 return PrettyJsonSerializer.self 0090 } 0091 } 0092 } 0093 0094 public func serialize(style: SerializationStyle = .Default) -> String { 0095 return style.serializer.init().serialize(self) 0096 } 0097 } 0098 0099 // MARK: Convenience 0100 0101 extension Json { 0102 public var isNull
Json.swift:95 return style.serializer.init().serialize(self): Bool { 0103 guard case .NullValue = self else { return false } 0104 return true 0105 } 0106 0107 public var boolValue
Json.swift:207 return rhs.isNull: Bool? { 0108 if case let .BooleanValue(bool) = self { 0109 return bool 0110 } else if let integer = intValue where integer == 1 || integer == 0 { 0111 // When converting from foundation type `[String : AnyObject]`, something that I see as important, 0112 // it's not possible to distinguish between 'bool', 'double', and 'int'. 0113 // Because of this, if we have an integer that is 0 or 1, and a user is requesting a boolean val, 0114 // it's fairly likely this is their desired result. 0115 return integer == 1 0116 } else { 0117 return nil 0118 } 0119 } 0120 0121 public var floatValue: Float? { 0122 guard let double = doubleValue else { return nil } 0123 return Float(double) 0124 } 0125 0126 public var doubleValue
Json.swift:209 guard let rhsValue = rhs.boolValue else { return false }: Double? { 0127 guard case let .NumberValue(double) = self else { 0128 return nil 0129 } 0130 0131 return double 0132 } 0133 0134 public var intValue
Json.swift:122 guard let double = doubleValue else { return nil }Json.swift:215 guard let rhsValue = rhs.doubleValue else { return false }: Int? { 0135 guard case let .NumberValue(double) = self where double % 1 == 0 else { 0136 return nil 0137 } 0138 0139 return Int(double) 0140 } 0141 0142 public var uintValue: UInt? { 0143 guard let intValue = intValue else { return nil } 0144 return UInt(intValue) 0145 } 0146 0147 public var stringValue
Json.swift:110 } else if let integer = intValue where integer == 1 || integer == 0 {Json.swift:143 guard let intValue = intValue else { return nil }: String? { 0148 guard case let .StringValue(string) = self else { 0149 return nil 0150 } 0151 0152 return string 0153 } 0154 0155 public var arrayValue
Json.swift:212 guard let rhsValue = rhs.stringValue else { return false }: [Json]? { 0156 guard case let .ArrayValue(array) = self else { return nil } 0157 return array 0158 } 0159 0160 public var objectValue
Json.swift:169 guard let array = arrayValue where index < array.count else { return nil }Json.swift:218 guard let rhsValue = rhs.arrayValue else { return false }: [String : Json]? { 0161 guard case let .ObjectValue(object) = self else { return nil } 0162 return object 0163 } 0164 } 0165 0166 extension Json { 0167 public subscript(index: Int) -> Json? { 0168 assert(index >= 0) 0169 guard let array = arrayValue where index < array.count else { return nil } 0170 return array[index] 0171 } 0172 0173 public subscript(key: String) -> Json? { 0174 get { 0175 guard let dict = objectValue else { return nil } 0176 return dict[key] 0177 } 0178 set { 0179 guard let object = objectValue else { fatalError("Unable to set string subscript on non-object type!") } 0180 var mutableObject = object 0181 mutableObject[key] = newValue 0182 self = .from(mutableObject) 0183 } 0184 } 0185 } 0186 0187 extension Json { 0188 public var description: String { 0189 return serialize(DefaultJsonSerializer()) 0190 } 0191 0192 public var debugDescription: String { 0193 return serialize(PrettyJsonSerializer()) 0194 } 0195 } 0196 0197 extension Json { 0198 public func serialize
Json.swift:175 guard let dict = objectValue else { return nil }Json.swift:179 guard let object = objectValue else { fatalError("Unable to set string subscript on non-object type!") }Json.swift:221 guard let rhsValue = rhs.objectValue else { return false }(serializer: JsonSerializer) -> String { 0199 return serializer.serialize(self) 0200 } 0201 } 0202 0203 0204 public func ==(lhs: Json, rhs: Json) -> Bool { 0205 switch lhs { 0206 case .NullValue: 0207 return rhs.isNull 0208 case .BooleanValue(let lhsValue): 0209 guard let rhsValue = rhs.boolValue else { return false } 0210 return lhsValue == rhsValue 0211 case .StringValue(let lhsValue): 0212 guard let rhsValue = rhs.stringValue else { return false } 0213 return lhsValue == rhsValue 0214 case .NumberValue(let lhsValue): 0215 guard let rhsValue = rhs.doubleValue else { return false } 0216 return lhsValue == rhsValue 0217 case .ArrayValue(let lhsValue): 0218 guard let rhsValue = rhs.arrayValue else { return false } 0219 return lhsValue == rhsValue 0220 case .ObjectValue(let lhsValue): 0221 guard let rhsValue = rhs.objectValue else { return false } 0222 return lhsValue == rhsValue 0223 } 0224 } 0225 0226 // MARK: Literal Convertibles 0227 0228 extension Json: NilLiteralConvertible { 0229 public init(nilLiteral value: Void) { 0230 self = .NullValue 0231 } 0232 } 0233 0234 extension Json: BooleanLiteralConvertible { 0235 public init(booleanLiteral value: BooleanLiteralType) { 0236 self = .BooleanValue(value) 0237 } 0238 } 0239 0240 extension Json: IntegerLiteralConvertible { 0241 public init(integerLiteral value: IntegerLiteralType) { 0242 self = .NumberValue(Double(value)) 0243 } 0244 } 0245 0246 extension Json: FloatLiteralConvertible { 0247 public init(floatLiteral value: FloatLiteralType) { 0248 self = .NumberValue(Double(value)) 0249 } 0250 } 0251 0252 extension Json: StringLiteralConvertible { 0253 public typealias UnicodeScalarLiteralType
Json.swift:189 return serialize(DefaultJsonSerializer())Json.swift:193 return serialize(PrettyJsonSerializer())JsonSerializer.swift:46 .map { $0.serialize(self) }JsonSerializer.swift:56 let serializedVal = val.serialize(self)JsonSerializer.swift:83 let serialized = val.serialize(self)JsonSerializer.swift:102 let serializedValue = val.serialize(self)= String 0254 public typealias ExtendedGraphemeClusterLiteralType = String 0255 0256 public init(unicodeScalarLiteral value: UnicodeScalarLiteralType) { 0257 self = .StringValue(value) 0258 } 0259 0260 public init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterType) { 0261 self = .StringValue(value) 0262 } 0263 0264 public init(stringLiteral value: StringLiteralType) { 0265 self = .StringValue(value) 0266 } 0267 } 0268 0269 extension Json: ArrayLiteralConvertible { 0270 public init(arrayLiteral elements: Json...) { 0271 self = .ArrayValue(elements) 0272 } 0273 } 0274 0275 extension Json: DictionaryLiteralConvertible { 0276 public init(dictionaryLiteral elements: (String, Json)...) { 0277 var object = [String : Json](minimumCapacity: elements.count) 0278 elements.forEach { key, value in 0279 object[key] = value 0280 } 0281 self = .ObjectValue(object) 0282 } 0283 } 0284
Json.swift:256 public init(unicodeScalarLiteral value: UnicodeScalarLiteralType) {