从json数据填充类

时间:2013-11-13 12:50:57

标签: objective-c arrays json class sendasynchronousrequest

请跟我一起玩这个我还在慢慢学习。

目前我有一个WCF,它返回一些json数据,格式为:

{
"RetrieveLocationsResult": [
   {
        "Address": "106 Mullaghboy Road",
        "Category": "Tarmac",
        "Closest_Property_Number": 106,
        "ID": 33,
        "Image1": 1234,
        "Image2": 0,
        "Image3": 0,
        "Latitude": 5,
        "Longitude": "-1.541902",
        "Notes": "New Driveway",
        "User_ID": 1
    },
    {
        "Address": "3 drumard road",
        "Category": "Tarmac",
        "Closest_Property_Number": 3,
        "ID": 40,
        "Image1": 23421,
        "Image2": 0,
        "Image3": 0,
        "Latitude": 4,
        "Longitude": "-2.541902",
        "Notes": "new gates",
        "User_ID": 1
    },
]
}

这可以在完整的http://crm.fpmccann.co.uk/TemperatureWebService/iphonewebservice.svc/retrievelocations

中看到

我有一个名为location的类,每个变量都被组成。我想要做的是将这个json数据解析到每个位置,然后使用经度和纬度制作一个将放置在地图上的位置数组。

到目前为止,我解析数据的方法是:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

     NSString *urlAsString = @"http://crm.fpmccann.co.uk/TemperatureWebService/iphonewebservice.svc/retrievelocations";
     NSURL *url = [NSURL URLWithString:urlAsString];
     NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

     [NSURLConnection
      sendAsynchronousRequest:urlRequest
      queue:[[NSOperationQueue alloc] init]
      completionHandler:^(NSURLResponse *response,
                          NSData *data,
                          NSError *error)

      {
          NSLog(@"error: %@", error);
          NSLog(@"data: %@", data);
          NSLog(@"response: %@", response);

          if ([data length] >0 && error == nil)
          {
              NSArray *array = [NSJSONSerialization JSONObjectWithData:data
                                                               options:0
                                                                 error:&error];
              NSLog(@"Response: %@", array);

              CLLocationCoordinate2D location;                         // coordinates of the annotation
              NSMutableArray *newAnnotations = [NSMutableArray array]; // an array in which we'll save our annotations temporarily
              MKPointAnnotation *newAnnotation;                        // the pointer to the annotation we're adding

              NSMutableArray *location = [array valueForKey:@"RetrieveLocationsResult"];


              NSMutableArray *longitude = [[array valueForKey:@"RetrieveLocationsResult"] valueForKey:@"Longitude"];


             // NSLog(@"Response", response, data);
          }
          else if ([data length] == 0 && error == nil)
          {
              NSLog(@"Nothing was downloaded.");
          }
          else if (error != nil){
              NSLog(@"Error = %@", error);
          }

      }];


}

请原谅这是在视图中加载,这将在其工作时立即更改。 目前它正在创建和称为位置的数组,其中有4个对象,但它们中没有任何内容。我想要做的是创建一个for循环并根据结果填充一个类。你能帮我:)谢谢

1 个答案:

答案 0 :(得分:2)

为检索结果创建JSON字典:

NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSMutableArray *retrieveLocationsResultArr = [NSMutableArray arrayWithArray:[jsonDict objectForKey:@"RetrieveLocationsResult"]];

[retrieveLocationsResultArr enumerateObjectsUsingBlock:^(NSDictionary *locationDict, NSUInteger idx, BOOL *stop) {
    //Create your Location Objects
    NSString *addressStr = [locationDict valueForKey:@"Address"];//sample, extract all values you want in your custom objects.
}];