Adds JSONHelper methods to make parsing json from strings and NSData objects easier.

This commit is contained in:
2020-09-17 12:58:59 -07:00
parent 8f52940d98
commit c224c51f84
3 changed files with 157 additions and 0 deletions

View File

@@ -38,6 +38,14 @@ NS_ASSUME_NONNULL_BEGIN
+(NSArray*)readArrayFromArray:(NSArray*)array forIndex:(NSUInteger)index;
+(NSArray*)readArrayFromArray:(NSArray*)array forIndex:(NSUInteger)index withDefaultValue:(NSArray* _Nullable)defaultValue;
+(id)parseJSONString:(NSString*)jsonString;
+(NSDictionary*)parseJSONStringAsDictionary:(NSString*)jsonString;
+(NSArray*)parseJSONStringAsArray:(NSString*)jsonString;
+(id)parseJSONData:(NSData*)jsonData;
+(NSDictionary*)parseJSONDataAsDictionary:(NSData*)jsonData;
+(NSArray*)parseJSONDataAsArray:(NSData*)jsonData;
@end
NS_ASSUME_NONNULL_END

View File

@@ -175,4 +175,53 @@ BOOL coerceObjectToBool(NSObject *object, BOOL defaultValue) {
return defaultValue;
}
+(id)parseJSONString:(NSString*)jsonString {
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSArray *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
return jsonRoot;
}
+(NSDictionary*)parseJSONStringAsDictionary:(NSString*)jsonString {
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
if (![jsonRoot isKindOfClass:[NSDictionary class]]) {
return nil;
} else {
return jsonRoot;
}
}
+(NSArray*)parseJSONStringAsArray:(NSString*)jsonString {
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSArray *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
if (![jsonRoot isKindOfClass:[NSArray class]]) {
return nil;
} else {
return jsonRoot;
}
}
+(id)parseJSONData:(NSData*)jsonData {
NSArray *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
return jsonRoot;
}
+(NSDictionary*)parseJSONDataAsDictionary:(NSData*)jsonData {
NSDictionary *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
if (![jsonRoot isKindOfClass:[NSDictionary class]]) {
return nil;
} else {
return jsonRoot;
}
}
+(NSArray*)parseJSONDataAsArray:(NSData*)jsonData {
NSArray *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
if (![jsonRoot isKindOfClass:[NSArray class]]) {
return nil;
} else {
return jsonRoot;
}
}
@end

View File

@@ -594,4 +594,104 @@ NSArray* readJSONArrayFromString(NSString *jsonString) {
XCTAssertEqualObjects(_jsonArrayValue, readValue);
}
#pragma mark - JSON parsing
- (void)testParseJSONDataReturnsDictionary {
NSString *jsonString = @"{\"a\":1,\"b\":2}";
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id parsedResult = [JSONHelper parseJSONData:jsonData];
XCTAssertNotNil(parsedResult);
XCTAssertTrue([parsedResult isKindOfClass:[NSDictionary class]]);
}
- (void)testParseJSONDataReturnsArray {
NSString *jsonString = @"[\"a\",1,\"b\",2]";
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id parsedResult = [JSONHelper parseJSONData:jsonData];
XCTAssertNotNil(parsedResult);
XCTAssertTrue([parsedResult isKindOfClass:[NSArray class]]);
}
- (void)testParseJSONDataAsDictionaryReturnsDictionary {
NSString *jsonString = @"{\"a\":1,\"b\":2}";
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *parsedResult = [JSONHelper parseJSONDataAsDictionary:jsonData];
XCTAssertNotNil(parsedResult);
XCTAssertTrue([parsedResult isKindOfClass:[NSDictionary class]]);
}
- (void)testParseJSONDataAsDictionaryReturnsNilIfNotDictionary {
NSString *jsonString = @"[\"a\",1,\"b\",2]";
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id parsedResult = [JSONHelper parseJSONDataAsDictionary:jsonData];
XCTAssertNil(parsedResult);
}
- (void)testParseJSONDataAsArrayReturnsArray {
NSString *jsonString = @"[\"a\",1,\"b\",2]";
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id parsedResult = [JSONHelper parseJSONDataAsArray:jsonData];
XCTAssertNotNil(parsedResult);
XCTAssertTrue([parsedResult isKindOfClass:[NSArray class]]);
}
- (void)testParseJSONDataAsArrayReturnsNilIfNotArray {
NSString *jsonString = @"{\"a\":1,\"b\":2}";
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id parsedResult = [JSONHelper parseJSONDataAsArray:jsonData];
XCTAssertNil(parsedResult);
}
- (void)testParseJSONStringReturnsDictionary {
NSString *jsonString = @"{\"a\":1,\"b\":2}";
id parsedResult = [JSONHelper parseJSONString:jsonString];
XCTAssertNotNil(parsedResult);
XCTAssertTrue([parsedResult isKindOfClass:[NSDictionary class]]);
}
- (void)testParseJSONStringReturnsArray {
NSString *jsonString = @"[\"a\",1,\"b\",2]";
id parsedResult = [JSONHelper parseJSONString:jsonString];
XCTAssertNotNil(parsedResult);
XCTAssertTrue([parsedResult isKindOfClass:[NSArray class]]);
}
- (void)testParseJSONStringAsDictionaryReturnsDictionary {
NSString *jsonString = @"{\"a\":1,\"b\":2}";
NSDictionary *parsedResult = [JSONHelper parseJSONStringAsDictionary:jsonString];
XCTAssertNotNil(parsedResult);
XCTAssertTrue([parsedResult isKindOfClass:[NSDictionary class]]);
}
- (void)testParseJSONStringAsDictionaryReturnsNilIfNotDictionary {
NSString *jsonString = @"[\"a\",1,\"b\",2]";
id parsedResult = [JSONHelper parseJSONStringAsDictionary:jsonString];
XCTAssertNil(parsedResult);
}
- (void)testParseJSONStringAsArrayReturnsArray {
NSString *jsonString = @"[\"a\",1,\"b\",2]";
id parsedResult = [JSONHelper parseJSONStringAsArray:jsonString];
XCTAssertNotNil(parsedResult);
XCTAssertTrue([parsedResult isKindOfClass:[NSArray class]]);
}
- (void)testParseJSONStringAsArrayReturnsNilIfNotArray {
NSString *jsonString = @"{\"a\":1,\"b\":2}";
id parsedResult = [JSONHelper parseJSONStringAsArray:jsonString];
XCTAssertNil(parsedResult);
}
@end