【问题标题】:Parse Returned Text into JSON Object in Swift?在 Swift 中将返回的文本解析为 JSON 对象?
【发布时间】:2015-06-01 23:57:14
【问题描述】:

已解决:

我能够用这个解决问题:

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)
                    }
                }

            }

原问题:

我目前正在使用 Yahoo! Finance 的 YQL 返回股票数据。我能够查询股票并成功返回所需信息,但前提是我知道股票的代码(AAPL、GOOG、FDX)。不过,我希望能够复制 iOS 的 Stocks 应用程序的搜索功能,它可以让您在键入字符串时执行股票代码的实时搜索。

当使用this URL 检索信息时,我得到一个对我没有用的 JSON 响应:

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

但是,我已经能够从this URL 中找到我要查找的内容,但数据并未以我目前知道如何处理的 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 对象以供我在应用程序中使用的方法。

由于它不是以我知道如何使用NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) 解析的 JSON 格式返回,因此我一直在寻找一种从字符串创建 JSON 对象的方法。有没有可以指出我只是想念的方向?

【问题讨论】:

  • 试试JSONModel。我以前用它来处理 Youtube 的 API。很容易实现。
  • 为什么你认为这不是一个有效的 json?
  • @IcaroNZ 我想我的问题措辞不正确。我看到它是 JSON,但我还没有遇到我无法解析的 JSON 响应。尝试解析 JSON 时,我将 nil 打印到控制台。
  • 对不起,我无法测试下面的代码,但如果它不起作用,它应该会给你一些解决方法的想法。祝你好运!

标签: json swift yql


【解决方案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 
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多