解析json数据未显示正确值

时间:2011-07-25 06:02:28

标签: iphone objective-c

SBJsonParser *parser = [[SBJsonParser alloc] init];

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.krsconnect.no/community/api.html?method=bareListEventsByCategory&appid=620&category-selected=350&counties-selected=Vest-Agder,Aust-Agder"]];
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
    NSDictionary *object = [parser objectWithString:json_string error:nil];
    NSArray *results = [parser objectWithString:json_string error:nil];

    NSDictionary *dictOne = [results objectAtIndex:0];

    appDelegate.books = [[NSMutableArray alloc] init];

    NSArray *activitiesArray = [dictOne objectForKey:@"events"];



    NSDictionary *dictTwo = [activitiesArray objectAtIndex:0];

    NSArray *eventArray=[dictTwo objectForKey:@"event"];
    NSDictionary *dictThree=[eventArray objectAtIndex:0];



//  NSLog(@"%@ - %@", [dictOne objectForKey:@"date"]);

//  NSLog(@"%@ - %@", [dictTwo objectForKey:@"affectedDate"]);


    NSString*date=[dictOne objectForKey:@"date"];

    NSLog(@"%@ - %@", [dictTwo objectForKey:@"affectedDate"]);
    NSLog(@"%@ - %@", [dictThree objectForKey:@"title"]);
    NSLog(@"%@ - %@", [dictThree objectForKey:@"location"]);
    NSLog(@"%@ - %@", [dictThree objectForKey:@"municipality"]);

当我的NSLog(标题)位置和市政当局显示零值

JSON:

[
  {
    "date": 1311552000000,
    "events": [
      {
        "affectedDate": 1311552000000,
        "event": {
          "appId": 42,
          "eventId": 18095,
          "location": "Sjølingstad Uldvarefabrik",
          "municipality": "Lindesnes",
          "title": "Utstillingsåpning - romfisk"
        }
      },
      {
        "affectedDate": 1311552000000,
        "event": {
          "appId": 42,
          "eventId": 18095,
          "location": "Sjølingstad Uldvarefabrik",
          "municipality": "Lindesnes",
          "title": "Utstillingsåpning - romfisk"
        }
      },
      {
        "affectedDate": 1311580800000,
        "event": {
          "appId": 620,
          "eventId": 19490,
          "location": "Høvåg Gjestehus, Vestre Vallesverd, Høvåg",
          "municipality": "Lillesand",
          "title": "Kunstutstilling på Høvåg Gjestehus"
        }
      },
...
] 

按照Praveen的说法,我尝试了这段代码,但它仍然无效:

NSDictionary *dictOne = [results objectAtIndex:0];
NSArray *activitiesArray = [dictOne objectForKey:@"events"];
NSDictionary *dictTwo = [activitiesArray objectAtIndex:1];
NSArray *eventArray=[dictTwo objectForKey:@"event"];
NSDictionary *dictThree=[eventArray objectAtIndex:2];

2 个答案:

答案 0 :(得分:0)

  1. 您不需要初始化解析器,b / c SBJSON使用NSString类别向名为JSONValue的标准NSString添加额外的解析方法,该NSString返回NSDictionary的{​​{1}}表示。
  2. 获得NSDictionary后,将其转换为NSArray,如此NSString,然后使用方法NSArray * values = [dictionary allValues];获取日期,依此类推。

答案 1 :(得分:0)

它的嵌套Json。值的解析和检索是不同的。获得嵌套对象的字典值后,您需要深入了解它以获取下一个值。

  1. 从主数组getobject中获取事件。
  2. 从上面的词典中获取事件对象
  3. 从步骤2中返回的字典中,您可以访问appId,eventId等
  4. 所以基本上你的代码应该是

    NSDictionary *dictTwo = [activitiesArray objectAtIndex:1]; // Or get object for key events