>我正在尝试通过创建NSDictionary的子类并添加getSomeProperty方法来解析Objective-C中的JSON页面。我已经能够使用带有键的每个 [ 或 { 前面的 JSON 页面执行此操作,但在解析以下类型的页面时遇到问题
[ {"id":12345,"name":"name1","account_id":10002000015631,
"start_at":"2015-09-02T20:24:13","enrollments":
[{"type":"student","role":"enrollment","role_id":821,
"user_id":10000001736511,"enrollment_state":"active"}],"hide_final_grades":false,
"workflow_state":"available","restrict_enrollments_to_course_dates":false},
{"id":100000055661076,"name":"name2","account_id":100000230095635,
"start_at":"2015-08-28T21:22:41Z","grading_standard_id":null,"is_public":null,
"course_code":"name2","default_view":"wiki","enrollment_term_id":10003000007529,"end_at":null,
"public_syllabus":false,"storage_quota_mb":500,"is_public_to_auth_users":false,
"apply_assignment_group_weights":false,"calendar":{"ics":"https://someurl.ics"},
"enrollments":[{"type":"student","role":"StudentEnrollment","role_id":821,
"user_id":10000001736511,"enrollment_state":"active"}],"hide_final_grades":false,"
workflow_state":"available","restrict_enrollments_to_course_dates":false}
]
例如,对于此网页 http://www.raywenderlich.com/demos/weather_sample/weather.php?format=json我能够创建方法
- (NSDictionary *)currentCondition
{
NSDictionary *dict = self[@"data"];
NSArray *ar = dict[@"current_condition"];
return ar[0];
}
和
-(NSString*) cloudcover
{
return self[@"cloudcover"];
}
以检索字符串 @"16"。
如何使用类似的方法从我的第一个示例 JSON 代码中获取 @"name1" 或 id @"12345"?
你有一个字典数组。要获得输出数组,可以使用以下方法:
- (NSMutableArray *)getValueString: (NSString*)string fromArray: (NSArray *)inputArray {
NSString *outputString;
NSMutableArray *outputArray = [NSMutableArray new];
for (id dict in inputArray) {
if ([[dict class] isSubclassOfClass:[NSDictionary class]]) {
outputString = [dict valueForKey: string];
}
else {
outputString = @"Name not found";
}
if (!(outputString.length > 0)) {
outputString = @"Name not found";
}
[outputArray addObject: outputString];
}
return outputArray;
}
并使用它来获取名称:
NSArray *resultArray = [self getValueString: @"name" fromArray: inputArray];
NSString *firstName = resultArray[0];
并通过以下方式获取 id:
NSArray *resultArray = [self getValueString: @"id" fromArray: inputArray];
NSString *firstId = resultArray[0];
字符串开头和结尾的[
]
表示它是一个数组,因此当您解析 JSON 时,您将获得一个NSArray*
,而不是NSDictionary*
。数组的第一个元素是一个对象,因此这将是一个NSDictionary*
。访问id
如下所示:
NSNumber* id = self[0][@"id"];
看起来您的currentCondition
是NSDictionary
上的一个类别。如果这是真的,并且您希望上面的代码正常工作,则需要将其放在NSArray
类别上。 如果不是真的,如果没有更多信息,我不明白self
是什么。