2013-07-22 202 views
0

如何从此json获取第一个“hls”。我的源代码正在搜索hls的值并显示它。但它获得的第二个 “HLS” ...... JSON数据是:具有相同密钥的JSON对象

{ 
"mbsServer": { 
    "version": 1, 
    "serverTime": 1374519337, 
    "status": 2000, 
    "subscriptionExpireTime": 1575057600, 
    "channel": { 
     "id" : 47, 
     "name" : "Yurd TV", 
     "logo" : "XXXX", 
     "screenshot" : "XXXXXXX", 
     "packageId" : 0, 
     "viewers": 1, 
     "access": true, 
     "streams" : [ 
       { 
        "birate" : 200, 
        "hls" : "XXXXXXXX", 
        "rtsp" : "XXXXXXX" 
       }, 
       { 
        "birate" : 500, 
        "hls" : "XXXXXXX", 
        "rtsp" : "XXXXXX" 
       } 
     ] 
    } 

}}

我的代码是:

@implementation ViewController中 - (IBAction为)播放:(ID )发件人{

NSData *JSONData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"XXXXXX"]]; 

NSObject *json = [JSONData objectFromJSONData]; 
NSArray *streams = [json valueForKeyPath:@"mbsServer.channel.streams"]; 
for (NSDictionary *stream in streams) 
{ 

    NSString *str = [[NSString alloc]initWithString:[stream valueForKey:@"hls"]]; 
    videoURL = [NSURL URLWithString:str]; 
}  
NSURLRequest *req = [NSURLRequest requestWithURL:videoURL]; 
[_stream loadRequest:req]; 

}

+0

的'[..]'表示数组。索引数组以访问它的元素(它们是“对象”)。请参阅json.org。 –

+0

只需从'streams'数组中获取第一个流,而不是循环它。 – talnicolas

+2

(提示:了解数组是什么,不要只是从某处复制代码。) –

回答

0

问题在于你的循环。 “流”中有两个流对象,如JSON对象中的[]所示,这意味着它是一个数组,并且它被填充了两个值。您正在迭代这两个对象,并始终获得第二个对象。手动选择你想要的对象,而不是迭代它们,并自动让自己陷入最后一个值。

取而代之的是:

for (NSDictionary *stream in streams) 
{ 

    NSString *str = [[NSString alloc]initWithString:[stream valueForKey:@"hls"]]; 
    videoURL = [NSURL URLWithString:str]; 
} 

你可能想这样的:

NSArray *arrayOfStreams = [json valueForKeyPath:@"mbsServer.channel.streams"]; 
NSDictionary *stream = [arrayOfStreams objectAtIndex:0]; 
NSString *str = [[NSString alloc]initWithString:[stream valueForKey:@"hls"]]; 
videoURL = [NSURL URLWithString:str]; 

有用:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html

+0

我该怎么做? HLS是一个动态值,每2小时更改一次,它从Wowza服务器获取数据。所以我需要每次都得到第一个。第二个不活跃。你能不能写一个exmplae –

+0

查看我编辑的例子。我稍微修改了一下,稍微详细些,但是对于发生了什么更清楚,因此你做错了什么。 – ChrisCM

+0

它确实工作。非常感谢你。我明白我在做什么错了:) –

相关问题