使用 AFNetworking 解析 JSON
Posted
技术标签:
【中文标题】使用 AFNetworking 解析 JSON【英文标题】:Parsing JSON with AFNetworking 【发布时间】:2016-02-28 19:14:31 【问题描述】:我正在尝试通过创建 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"?
【问题讨论】:
【参考方案1】:你有一个字典数组。要拥有一组输出,您可以使用以下方法:
- (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];
【讨论】:
【参考方案2】:JSON 字符串开头和结尾的[
]
表示它是一个数组,所以当你解析 JSON 时,你会得到一个NSArray*
,而不是NSDictionary*
。数组的第一个元素是一个对象,所以它将是一个NSDictionary*
。像这样访问id
:
NSNumber* id = self[0][@"id"];
您的currentCondition
似乎是NSDictionary
上的一个类别。如果这是真的并且您希望上面的代码能够工作,您需要将它放在NSArray
的类别中。如果不是真的,没有更多信息,我不明白self
是什么。
【讨论】:
以上是关于使用 AFNetworking 解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章