1

我的 .Net 网络服务网址是:http: //xx.xx.xx.xxx/iOSCalender/service1.asmx,它有一个名为:“getDataFromMaster”的方法名称,它返回 JSON 数据如下(我不知道为什么不同的浏览器显示不同的输出):

从 safari 运行时:

[
{
    "Training_Code": "1234 ",
    "Training_Duration": "2hrs ",
    "Training_Startdate": "14/02/2013 15:00:00",
    "Training_Enddate": "14/02/2013 17:00:00",
    "Trainer_ID": 1,
    "Training_Location": "B-Wing Training room-4",
    "Comments": "C# training",
    "Keyword": "C#1234",
    "NumberofDays": 1
},
{
    "Training_Code": "4321 ",
    "Training_Duration": "16 ",
    "Training_Startdate": "17/02/2013 10:30:00",
    "Training_Enddate": "17/02/2013 17:30:00",
    "Trainer_ID": 2,
    "Training_Location": "A-Wing Training Room-6",
    "Comments": "Objective-C",
    "Keyword": "Obj-C4321",
    "NumberofDays": 2
}
]

从 IE 运行时:

<?xmlversion="1.0"encoding="UTF-8"?><stringxmls="http://tempuri.org/">
[
{
    "Training_Code": "1234 ",
    "Training_Duration": "2hrs ",
    "Training_Startdate": "14/02/2013 15:00:00",
    "Training_Enddate": "14/02/2013 17:00:00",
    "Trainer_ID": 1,
    "Training_Location": "B-Wing Training room-4",
    "Comments": "C# training",
    "Keyword": "C#1234",
    "NumberofDays": 1
},
{
    "Training_Code": "4321 ",
    "Training_Duration": "16 ",
    "Training_Startdate": "17/02/2013 10:30:00",
    "Training_Enddate": "17/02/2013 17:30:00",
    "Trainer_ID": 2,
    "Training_Location": "A-Wing Training Room-6",
    "Comments": "Objective-C",
    "Keyword": "Obj-C4321",
    "NumberofDays": 2
}
]</string>

我正在尝试从我的 iOS 应用程序中解析 JSON,如下所示:

-(void)loadCalendarView
{
    if(x==0)
    {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Failed" message:@"Authentication failed" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }
else if(x==1)
{
   [self ParseJSONdataFromMasterTraining];

        [self.navigationController pushViewController:self.viewController animated:YES];

}
}

-(void)ParseJSONdataFromMasterTraining
{

dispatch_sync(kBgQueue, ^{NSData *data = [NSData dataWithContentsOfURL:URLMasterTraining];
     [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}


-(void)fetchedData:(NSData*)responseData
{
NSError *err;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&err];
NSLog(@"jsonDict = %@",json);
NSArray *trainingDetails = [json objectForKey:@"iOSCalender"];
NSLog(@"getDataFromTrainingMaster = %@",trainingDetails);

}

我无法获取数据,我的“trainingDetails”显示为空。

注意:我为此尝试了“dispatch_sync”和“dispatch_async”方法,但仍然遇到同样的问题。

任何人都可以指导我,我要去哪里以及如何纠正这个问题?谢谢。

4

1 回答 1

0

好的,您的示例 JSON 是一个字典数组。您获取 iOSCalendar 的代码将不起作用并且应该引发错误,因为数组没有 objectForKey: 那就是如果您在 JSON 对象中获取某些内容。

您是否查看了错误变量。如果你得到一个空值,你应该看看。

您可以将 NSData 输出为字符串。

NSString *s = [NSString alloc] initWithData: responseData encoding: NSUTF8String]; 

打印出来看看你得到了什么。只需查看您的数据输出,您就会得到一些以

<html

那不是 JSON

于 2013-02-18T14:46:56.427 回答