2013-07-22 155 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

它確實工作。非常感謝你。我明白我在做什麼錯了:) –

相關問題