2011-07-10 118 views
0

我已經研究了很多關於堆棧溢出的問題,並且發現了一些可能適用於我想要做的事情的例子,但是我不會說謊,我有點失落。我有一個非常簡單的字符串,它顯示在我想要讀入應用程序的網頁上,解析它,然後在一些UITextFields中顯示它。網址是mtgox.com/data/code/ticker.php。這是一個PHP頁面,得到一個簡單的JSON字符串,一個內襯,看起來像以下:從網頁讀取一個字符串

{"ticker":{"high":14.6999,"low":14.04,"avg":14.379509781,"vol":10981,"last":14.44278,"buy":14.4302,"sell":14.44278}} 

我怎麼能看這種串到我的應用程序,然後分析它?我正考慮在網站上使用UIWebView類和stringByEvaluatingJavaScriptString方法,但我對JavaScript的瞭解不多,我也不知道這是否可行。

我見過一些人提到使用JSON庫,但不知道這是什麼將是我所需要的最好的,如果這將甚至工作;我覺得這可能有點矯枉過正,因爲我只解析一行。

回答

0

如果你堅持不使用JSON解析器(庫安裝和其他框架的配置Hasle城),在 下面的代碼已經過測試,做工精細你的網址:

將此代碼放在具有視圖控制器文本域。


- (NSDictionary *)parseJSONFromSomeURL 
{ 
    NSURL *pageURL = [NSURL URLWithString:@"http://mtgox.com/code/data/ticker.php"]; 
    NSString *JSONString = [NSString stringWithContentsOfURL:pageURL encoding:NSUTF8StringEncoding error:nil]; 

    JSONString = [JSONString stringByReplacingOccurrencesOfString:@"{" withString:@""]; 
    JSONString = [JSONString stringByReplacingOccurrencesOfString:@"}" withString:@""]; 
    JSONString = [JSONString stringByReplacingOccurrencesOfString:@"\"" withString:@""]; 

    NSArray *components = [JSONString componentsSeparatedByString:@","]; 

    NSMutableDictionary *result = [NSMutableDictionary dictionary]; 
    for (NSString *parts in components) 
    { 
     NSArray *subComponents = [parts componentsSeparatedByString:@":"]; 
     // First element has 3 items (it has ticker) 
     if ([subComponents count] > 2) 
     { 
      [result setValue:@"" forKey:[subComponents objectAtIndex:0]]; 
      [result setValue:[subComponents objectAtIndex:2] forKey:[subComponents objectAtIndex:1]]; 
     } 
     else 
     { 
      [result setValue:[subComponents objectAtIndex:1] forKey:[subComponents objectAtIndex:0]]; 
     } 
    } 

    return result; 
} 

希望它有助於解決您的問題。

+0

哈!愛它:)謝謝!我最終可能會在JSON庫上使用此代碼,原因很簡單,這只是少數代碼,而不是包含JSON庫框架所需的多個類文件。謝謝! – Andrew

2

我建議通過this tutorial,它應該告訴你你需要知道從網頁獲取JSON編碼信息並解析它。

+0

好吧,我經歷了教程,它確實做了我需要解析頁面並將信息放入NSDictionary。現在,當我嘗試使用該字典中特定鍵的值來設置textField的文本時,我正在崩潰。 – Andrew

+0

'2011-07-09 22:55:45.093 BTC Exchange [1862:ef03] 14.6999 2011-07-09 22:55:45.094 BTC Exchange [1862:ef03] - [NSDecimalNumber length]:發送到實例0x6a7a670的無法識別的選擇器 2011-07-09 22:55:45.095 BTC Exchange [1862:ef03] ***由於未捕獲異常'NSInvalidArgumentException',原因:' - [NSDecimalNumber長度]:無法識別的選擇器發送到實例0x6a7a670' ** *第一次拋出調用堆棧: 終止調用拋出異常# – Andrew

+0

好吧,事實證明我可以調用NSNumber類的'stringValue'調用將從字典中提取的NSDecimalValue轉換爲可用的字符串!傻我:P應該更多地關注API。 – Andrew