2015-06-01 33 views
0

解決:在Swift中將文本解析爲JSON對象?

我能解決這個問題的問題:

if let returnedData = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) as? NSString? { 
       let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)! 
       let trimmedDataString = ((dataString.stringByReplacingOccurrencesOfString("YAHOO.Finance.SymbolSuggest.ssCallback", withString: "") as NSString).stringByReplacingOccurrencesOfString("(", withString: "") as NSString).stringByReplacingOccurrencesOfString(")", withString: "") 
       let dataFromDataString = trimmedDataString.dataUsingEncoding(NSUTF8StringEncoding)! 
       if let jsonObject: AnyObject = NSJSONSerialization.JSONObjectWithData(dataFromDataString, options: .allZeros, error: nil) { 
        if let resultSet = jsonObject["ResultSet"] as! NSDictionary? { 
         println(resultSet) 
        } 
       } 

      } 

原題:我目前使用雅虎

金融的YQL返回股票數據。我能夠查詢股票併成功返回所需的信息,但前提是我知道股票的符號(AAPL,GOOG,FDX)。不過,我希望能夠複製iOS股票應用程序的搜索功能,該功能可讓您在鍵入字符串時執行股票代碼的實時搜索。

當使用this URL來檢索信息,我得到一個JSON響應,這是沒有用的,對我說:

{"query":{"count":0,"created":"2015-06-01T23:49:49Z","lang":"en-us","results":null}} 

不過,我已經能夠找到什麼,我從this網址尋找,但該數據未返回JSON格式的,我現在知道如何處理:

YAHOO.Finance.SymbolSuggest.ssCallback({"ResultSet":{"Query":"k","Result":[{"symbol":"K","name":"Kellogg Company","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Equity"},{"symbol":"KNDI","name":"Kandi Technologies Group, Inc.","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"KO","name":"The Coca-Cola Company","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Equity"},{"symbol":"KMI","name":"Kinder Morgan, Inc.","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Equity"},{"symbol":"KMB","name":"Kimberly-Clark Corporation","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Equity"},{"symbol":"GMCR","name":"Keurig Green Mountain, Inc.","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"KORS","name":"Michael Kors Holdings Limited","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Equity"},{"symbol":"KLAC","name":"KLA-Tencor Corporation","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"KRFT","name":"Kraft Foods Group, Inc.","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"^KLSE","name":"FTSE Bursa Malaysia KLCI","exch":"KLS","type":"I","exchDisp":"Kuala Lumpur Stock Exchange ","typeDisp":"Index"}]}}) 

我一直在尋找一整天一種方式來轉換這個返回的字符串成,我需要在使用JSON對象我的應用程序。

因爲它沒有以JSON格式回來,我知道如何解析NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil),我一直在尋找一種方法來從字符串中創建一個JSON對象。有沒有一個方向我可以指出,我只是失蹤?

+0

嘗試[JSONModel](https://github.com/icanzilb/JSONModel)。我之前使用它來處理Youtube的API。很容易實現。 –

+0

你爲什麼認爲這不是一個有效的json? – Icaro

+0

@IcaroNZ我想我沒有正確地說出我的問題。我看到它是JSON,但我還沒有遇到過我還沒有解析過的JSON響應。當試圖解析JSON時,我把'''nil''打印到控制檯上。 –

回答

1

嘗試這種情況:

if let returnedData = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) as? NSString? { 
    let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)! 
    if let jsonObject: AnyObject = NSJSONSerialization.JSONObjectWithData(dataString, options: .allZeros, error: nil) { 
    if let resultSet = resultSet[yourDictionaryObject objectForKey:@"YAHOO.Finance.SymbolSuggest.ssCallback"] 
     //This should return a array of dictionary 
    } 
}