diff --git a/Sources/DynamicJSON.swift b/Sources/DynamicJSON.swift index 49f4307..1cdac2e 100644 --- a/Sources/DynamicJSON.swift +++ b/Sources/DynamicJSON.swift @@ -21,25 +21,27 @@ public enum JSON { // MARK: Dynamic Member Lookup - public subscript(index: Int) -> JSON? { - if case .array(let arr) = self { - return index < arr.count ? arr[index] : nil + public subscript(dynamicMember member: String) -> JSON { + if case .dictionary(let dict) = self { + return dict[member] ?? .null } - return nil + return .null } - public subscript(key: String) -> JSON? { - if case .dictionary(let dict) = self { - return dict[key] + // MARK: Subscript + + public subscript(index: Int) -> JSON { + if case .array(let arr) = self { + return index < arr.count ? arr[index] : .null } - return nil + return .null } - public subscript(dynamicMember member: String) -> JSON? { + public subscript(key: String) -> JSON { if case .dictionary(let dict) = self { - return dict[member] + return dict[key] ?? .null } - return nil + return .null } // MARK: Initializers diff --git a/Tests/DynamicJSONTests.swift b/Tests/DynamicJSONTests.swift index eed11d8..2cce739 100644 --- a/Tests/DynamicJSONTests.swift +++ b/Tests/DynamicJSONTests.swift @@ -35,10 +35,10 @@ class DynamicJSONTests: XCTestCase { func test_data_initializer() { let usersData = loadMockUsersData() let json = JSON(usersData) - XCTAssert(json[0]?.id?.int == 1) - XCTAssert(json[0]?.username?.string == "Bret") - XCTAssert(json[0]?.address?.street?.string == "Kulas Light") - XCTAssert(json[0]?.address?.geo?.lat?.double == -37.3159) + XCTAssert(json[0].id.int == 1) + XCTAssert(json[0].username.string == "Bret") + XCTAssert(json[0].address.street.string == "Kulas Light") + XCTAssert(json[0].address.geo.lat.double == -37.3159) } func test_convert_json_to_data_and_compare() { @@ -174,10 +174,10 @@ class DynamicJSONTests: XCTestCase { func test_string_subscript_accessor() { let usersData = loadMockUsersData() let json = JSON(usersData) - XCTAssert(json[0]?["id"]?.int == 1) - XCTAssert(json[0]?["username"]?.string == "Bret") - XCTAssert(json[0]?.address?["street"]?.string == "Kulas Light") - XCTAssert(json[0]?.address?["geo"]?.lat?.double == -37.3159) + XCTAssert(json[0]["id"].int == 1) + XCTAssert(json[0]["username"].string == "Bret") + XCTAssert(json[0].address["street"].string == "Kulas Light") + XCTAssert(json[0].address["geo"].lat.double == -37.3159) } // MARK: Helpers