使用 AFNetworking 解析 JSON



>我正在尝试通过创建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

字符串开头和结尾的[ ]表示它是一个数组,因此当您解析 JSON 时,您将获得一个NSArray*,而不是NSDictionary*。数组的第一个元素是一个对象,因此这将是一个NSDictionary*。访问id如下所示:

  NSNumber* id = self[0][@"id"];

看起来您的currentConditionNSDictionary上的一个类别。如果这是真的,并且您希望上面的代码正常工作,则需要将其放在NSArray类别上。 如果不是真的,如果没有更多信息,我不明白self是什么。

最新更新