         float = e.valueOrFail("float")
         bool = e.valueOrFail("bool")
         nested = e.valueOrFail("nested.value")
+        group = e.valueOrFail("group")
 
         if !e.isValid {
             return nil
         }
     }
 }
+
+struct Group: Decodable {
+    let name: String
+    let floor: Int
+
+    init?(_ e: Extractor) {
+        name = e.valueOrFail("name")
+        floor = e.valueOrFail("floor")
+
+        if !e.isValid {
+            return nil
+        }
+    }
+}

    let float: Float
    let bool: Bool
    let nested: String

    init?(_ e: Extractor) {
        firstName = e.valueOrFail("first_name")

        XCTAssert(person?.float == 32.1)
        XCTAssert(person?.bool == true)
        XCTAssert(person?.nested == "The nested value")
        XCTAssert(person?.group.name == "Himotoki")
        XCTAssert(person?.group.floor == 12)

        // Failing case
        JSON["bool"] = nil
