5

NSJSONSerialization Class Reference について理解しようとしています。developer.apple.com の Web サイトにコード例がないので、迷ってしまいます。Web には、他の json ライブラリを使用した数百万の例がありますが、最新ビルドの xcode でそれらを動作させることはできませんでした。(実行中: バージョン 4.3.1 (4E1019)、iPhone 5.0.1 でテスト中)

ボタンを使用して、json ファイルから iPhone にデータを取得したいと考えています。

URL からデータを取得するとしましょう: http://companyurl/jsonfile.json (標準の JSON 形式)

jsonfile.json は次のようになります…;

{
  "companylist":   
[
      {
        "company":"Companyname 1",
        "telephone":"1234567890",
        "url":"http:\/\/www.companyname1.com\/",
        "category":"category 1",
        "position":"1",
      },
      {
        "company":"Companyname 2",
        "telephone":"2345678901",
        "url":"http:\/\/www.companyname2.com\/",
        "category":"category 2",
        "position":"2",
      },
      {
        "company":"Companyname 3",
        "telephone":"3456789012",
        "url":"http:\/\/www.companyname3.com\/",
        "category":"category 3",
        "position":"3",
      }
]
}

.h と .m ファイルには何を書きますか?

助けてくれてありがとう!:)

4

6 に答える 6

15
NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://your_web_server/your_file...."]];
NSError *error=nil;
id response=[NSJSONSerialization JSONObjectWithData:data options:
                                NSJSONReadingMutableContainers error:&error]; 

NSLog(@"Your JSON Object: %@ Or Error is: %@", response, error);

注: このコードは、現時点ではシミュレーターで iOS 5.01、iPad デバイスで 5.1 を使用する Xcode 4.2 で動作します。

于 2012-03-17T21:37:42.727 に答える
7

みんなありがとう。私はそれを考え出した。(...そして、これが私がやったことです:)

.m ファイルに次のコードを追加しました。

    - (IBAction)getDataFromJson:(id)sender {
        NSURL *url = [NSURL URLWithString:@"http://yourwebsite.com/jsonfile.json"];

        NSData *jsonData = [NSData dataWithContentsOfURL:url];


        if(jsonData != nil)
        {
            NSError *error = nil;
            id result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
            if (error == nil)
                NSLog(@"%@", result);
}
}

.h ファイルに、次のコードを追加しました。

@interface ViewController : UIViewController
- (IBAction)getDataFromJson:(id)sender;
于 2012-03-24T21:31:32.720 に答える
1

この方法でサーバー データを取得するために、決して dataWithContentsOfURL: を使用しないでください。これは制御不能であり、アプリケーションが不明な状態のままになる可能性があります。少なくとも、NSURLRequest を使用してすべての URL 呼び出しを行う必要があります。さらに良いことに、iOS7 より前をサポートしていない場合は、NSURLSession を使用してください。

于 2014-04-18T05:14:16.273 に答える
1

ここに素晴らしいチュートリアルがあります。 http://www.raywenderlich.com/5492/working-with-json-in-ios-5

于 2012-03-17T21:26:14.020 に答える
0
    jsonDict = [[NSDictionary alloc] init];
    data = [[NSArray alloc] init]; 

      url =[NSURLURLWithString:@"Please Type Your URL  "];


 // Parse the JSON data from the given URL
  - (void) parseJSONWithURL:(NSURL *) jsonURL
  {
// Set the queue to the background queue. We will run this on the background thread to keep
// the UI Responsive.
    dispatch_queue_t queue =    dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);

  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

// Run request on background queue (thread).
      dispatch_async(queue, ^{
      NSError *error = nil;

    // Request the data and store in a string.
      NSString *json = [NSString stringWithContentsOfURL:jsonURL
                                              encoding:NSASCIIStringEncoding
                                                 error:&error];
      if (error == nil){

        // Convert the String into an NSData object.
        NSData *jsonData = [json dataUsingEncoding:NSASCIIStringEncoding];

        // Parse that data object using NSJSONSerialization without options.
        jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];

        // Parsing success.
        if (error == nil)
        {
            // Go back to the main thread and update the table with the json data.
            // Keeps the user interface responsive.
            dispatch_async(dispatch_get_main_queue(), ^{
                [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
                data= [[jsonDict valueForKey:@"Result"] valueForKey:@"data"];
                [jsonTable reloadData];
            });
        }

        // Parsing failed, display error as alert.
        else
        {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"Uh Oh, Parsing Failed." delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];

            [alertView show];
        }
    }

    // Request Failed, display error as alert.
    else
    {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"Request Error! Check that you are connected to wifi or 3G/4G with internet access." delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];

        [alertView show];
      }
   });
  }


 // Delegate call back for cell at index path.
  - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
   {
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];

    if (cell == nil)
    {
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MainCell"];
}

// Set the main label as the episode name.
   cell.textLabel.text = [[data objectAtIndex:indexPath.row] objectForKey:@"fullname"];




    NSNumber *seasonNum = [[data objectAtIndex:indexPath.row] objectForKey:@"username"];
    NSNumber *episodeNum = [[data objectAtIndex:indexPath.row] objectForKey:@"location"];
    NSMutableString *seasonEpisodeNum = [NSMutableString stringWithFormat:@"username: %@ ", seasonNum];
    [seasonEpisodeNum appendString:[NSMutableString stringWithFormat:@"location: %@", episodeNum]];
    cell.detailTextLabel.text = seasonEpisodeNum;

    return cell;
    }






  -(int) numberOfSectionsInTableView:(UITableView *) tableView
  {
   return 1;
  }


  - (int) tableView:(UITableView *) tableView numberOfRowsInSection:  (NSInteger)section
  {
return [data count];
 }

このコードは .m ファイルを実装します

および .h ファイル

    {
       NSDictionary *jsonDict;
       IBOutlet UITableView *jsonTable;
       NSArray *data;
       NSURL *url;
    }
于 2014-05-07T10:29:00.717 に答える
0

Tweeting サンプル アプリの形式でコード例あります。

于 2012-03-17T21:11:35.160 に答える