如何将JSON解析为Objective C - SBJSON

Chr*_*ris 8 json objective-c ios4

你能告诉我如何传递一个如下所示的JSON字符串:

{"lessons":[{"id":"38","fach":"D","stunde":"t1s1","user_id":"1965","timestamp":"0000-00-00 00:00:00"},{"id":"39","fach":"M","stunde":"t1s2","user_id":"1965","timestamp":"0000-00-00 00:00:00"}]}
Run Code Online (Sandbox Code Playgroud)

我试过这样的:

SBJSON *parser =[[SBJSON alloc] init];
    NSArray *list = [[parser objectWithString:JsonData error:nil] copy];
    [parser release];
    for (NSDictionary *stunden in list)
    {
        NSString *content = [[stunden objectForKey:@"lessons"] objectForKey:@"stunde"];

    }
Run Code Online (Sandbox Code Playgroud)

提前致谢

最好的祝福

小智 22

请注意,您的JSON数据具有以下结构:

  1. 顶级值是一个对象(字典),它有一个名为'lessons'的属性
  2. 'lessons'属性是一个数组
  3. 'lessons'数组中的每个元素都是一个具有多个属性的对象(包含课程的字典),包括'stunde'

相应的代码是:

SBJSON *parser = [[[SBJSON alloc] init] autorelease];
// 1. get the top level value as a dictionary
NSDictionary *jsonObject = [parser objectWithString:JsonData error:NULL];
// 2. get the lessons object as an array
NSArray *list = [jsonObject objectForKey:@"lessons"];
// 3. iterate the array; each element is a dictionary...
for (NSDictionary *lesson in list)
{
    // 3 ...that contains a string for the key "stunde"
    NSString *content = [lesson objectForKey:@"stunde"];

}
Run Code Online (Sandbox Code Playgroud)

几点意见:

  • -objectWithString:error:,error参数是指向指针的指针.这是常见的做法NULL,而不是nil在这种情况下.在方法返回的情况下,传递NULL和使用NSError对象来检查错误也是一个好主意nil

  • 如果jsonObject仅在该特定方法中使用,则可能不需要复制它.上面的代码没有.