我无法从我的 json 中获取所有 URL。此代码仅显示 json 的第一个 URL

Posted

技术标签:

【中文标题】我无法从我的 json 中获取所有 URL。此代码仅显示 json 的第一个 URL【英文标题】:i can't get all the URL from my json. this code show only first URL of json 【发布时间】:2014-03-06 12:35:26 【问题描述】:
- (void)viewDidLoad

    [super viewDidLoad];

    NSURL *url = [NSURL URLWithString:@"http://www.xovak.com/json_logo.php"];
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSError *error;

    NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
    NSDictionary *Logos = [[[json valueForKey:@"logos"]objectAtIndex:0]mutableCopy];
    NSMutableArray *img = [[NSMutableArray alloc]init];

    for (id item in Logos) 
        [img addObject:[Logos objectForKey:@"image_file"]];
        NSLog(@"%@",img);
    

【问题讨论】:

@Wain 将上面的 url 复制并粘贴到浏览器中,您将获得 json 数据 @iDev,它会一直在那个链接上吗?如果没有...,这个问题将来会有多大用处? 是的,你说得对,但提问者是我们社区的初学者,他不知道社区的概念。 @Wain 【参考方案1】:

你确定Logos 不应该是NSArray 吗?至少,从您的 JSON 对象看是这样的。

改为这样做:

NSURL *url = [NSURL URLWithString:@"http://www.xovak.com/json_logo.php"];
NSData *data = [NSData dataWithContentsOfURL:url];
NSError *error;

NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSArray *Logos = [[json valueForKey:@"logos"] mutableCopy];
NSMutableArray *img = [[NSMutableArray alloc]init];

for (NSDictionary *item in Logos) 
  [img addObject:[item objectForKey:@"image_file"]];
  NSLog(@"%@",img);

【讨论】:

【参考方案2】:

从 JSON 响应中获取所有 imagFile 的另一种方法。请检查一下。

NSURL *url = [NSURL URLWithString:@"http://www.xovak.com/json_logo.php"];
NSData *data = [NSData dataWithContentsOfURL:url];
NSError *error;

NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSMutableArray *img = [[NSMutableArray alloc]init];
NSArray *listOfURL = [[NSArray alloc] init];
NSArray *websiteDetails = (NSArray *) [json objectForKey:@"logos"];

for(int count=0; count<[websiteDetails count]; count++)

    NSDictionary *websiteInfo = (NSDictionary *) [websiteDetails objectAtIndex:count];
    NSString *imagefile = (NSString *) [websiteInfo objectForKey:@"image_file"];
    if([imagefile length]>0)
    
        NSLog(@"Imagefile URL is: %@",imagefile);
        [img addObject:imagefile];
    


listOfURL = img;


---------// Add This Method in TableView Cell For Row at IndexPath Method//-----------------

// Logic For Downloading Image From URL and Show in TableviewCell
//get a dispatch queue

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//this will start the image loading in bg
dispatch_async(concurrentQueue, ^

    NSURL *url = [NSURL URLWithString:[listOfURL objectAtIndex:indexPath.row]];
    NSData *image = [[NSData alloc] initWithContentsOfURL:url];

    //this will set the image when loading is finished
    dispatch_async(dispatch_get_main_queue(), ^

        cell.imageview.image = [UIImage imageWithData:image];
    );
);

【讨论】:

在 if([session..]) 条件会话中是什么意思?? 这只是我的单吨类,我在其中为所有类添加了所有方法。我的意思只是检查字符串是否为 NULL。谢谢指出。 我想在imageview plzz中显示这个数组中的图像......来自你身边的任何建议对这个有帮助.. 请检查我编辑的答案以显示来自 URL 的图像并将其显示在 UITableview 中。 To All..如果我的回答有误,请告诉我。为什么不写任何cmets就对我的答案投反对票。不是好办法。长大成人。【参考方案3】:

您只在Logos 中添加了一项。另外,它不应该是NSMutableDictionary,而是NSArray

另一方面,您在 Logos 中循环播放的项目 实际上是 NSDictionarys。

所以,您的代码现在应该是:

    NSArray *Logos = [json valueForKey:@"logos"];
    NSMutableArray *img = [[NSMutableArray alloc]init];

    for (NSDictionary *item in Logos) 
        [img addObject:[item objectForKey:@"image_file"]];
        NSLog(@"%@",img);
    

【讨论】:

【参考方案4】:

NSDictionary *Logos = [[[json valueForKey:@"logos"]objectAtIndex:0]mutableCopy]; 替换为NSArray *Logos = [[json valueForKey:@"logos"] mutableCopy]; 以获取所有对象。

【讨论】:

以上是关于我无法从我的 json 中获取所有 URL。此代码仅显示 json 的第一个 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Klaxon 从我的 JSON 文件中的两个数组中获取第一个图像 URL?

我无法使用此编码从我的 SD 卡中获取歌曲。我可以这样做还是需要 Content Provider 这样做

如何将android与php mysql连接[重复]

如何在 Vue 中使用 axios 检索 JSON Web 令牌?

如何通过 vue js 中的 slug(也存在于 json 文件中)从我的 json 文件中获取文章内容?

通过URL共享图像