2016-01-08 64 views
0
func retrieveData(englishWord : String, completionHandler : (success: Bool, data : [String : AnyObject]?, errorString : String?) -> Void) { 
     let baseURL = "https://api.pearson.com/v2/dictionaries/ldoce5/entries?headword=vodka" 
     let urlString = baseURL 
     print(urlString) 
     let url = NSURL(string: urlString) 
     let request = NSMutableURLRequest(URL: url!) 
     let session = NSURLSession.sharedSession() 
     let task = session.dataTaskWithRequest(request) { data, response, error in 
      if error != nil { 
       completionHandler(success: false, data: nil, errorString: "There was a networking error") 
       return 
      } 
      if data == nil { 
       completionHandler(success: false, data: nil, errorString: "There was an error in the request for data") 
       return 
      } 

      let parsedResult : AnyObject? 
      do { 
       parsedResult = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! [String : AnyObject] 
       print(parsedResult!) 

      } catch { 
       completionHandler(success: false, data: nil, errorString: "There was an error in the conversion for data") 
       return 
      } 

     } 
     task.resume() 
    } 

所以现在print(parsedResult!)给出:NSJSONSerialization.JSONObjectWithData更改返回结果的内容?

{ 数= 1; limit = 10; offset = 0; 结果=( { 数据集=( ldoce5, 字典 ); 词条=伏特加酒; ID = cqAG3cXCxZ; “part_of_speech”=名词; 发音=( { 音频=( { LANG = “英英”; 类型=发音; URL = “/v2/dictionaries/assets/ldoce/gb_pron/vodka0205.mp3”; } ); IPA = “\ U02c8v \ U0252dk \ U0259”; }, { audio =( lang =“American English”; type =发音; url =“/v2/dictionaries/assets/ldoce/us_pron/vodka.mp3”; } ); ipa =“\ U02c8v \ U0251 \ U02d0dk \ U0259”; lang =“美国英语”; } ); 感官=(​​ { 定义=( “一强明确酒精饮料最初从俄罗斯,或这种玻璃” ); } ); url =“/ v2/dictionaries/entries/cqAG3cXCxZ”; } ); status = 200; total = 1; url =“/ v2/dictionaries/ldoce5/entries?headword = vodka”; }

但查询网址:Here

我张贴在这里为方便起见:

{ “地位”:200, “偏移”:0, “限制”:10, “计数”:1, “总”:1, “URL”: “/ V2 /字典/ ldoce5 /条目词条=伏特加”, “结果”:[{ “数据集”:[ “ldoce5”, “字典”] ,“headword”:“vodka”,“id”:“cqAG3cXCxZ”,“part_of_speech”:“名词”,“发音”:[{“audio”:[{“lang”:“British English”,“type” “发音”, “URL”: “/ V2 /字典/资产/ LDOCE/gb_pron/vodka0205.mp3”}], “IPA”: “vɒdkə”},{ “音频”:[{ “郎”:“阿梅尔ican English“,”type“:”发音“,”url“:”/ v2/dictionaries/assets/ldoce/us_pron/vodka.mp3“}],”ipa“:”vɑːdkə“,”lang“:” “}],”感官“:[{”definition“:[”来自俄罗斯的一种清淡的酒精饮料,或者一杯这样的“]}],”url“:”/ v2/dictionaries/entries/cqAG3cXCxZ“} ]}

是否有原因为什么NSJSONSerialization正在更改我的数据,因为打印出来的数据与Pearson API返回的数据明显不同?

+0

,我可以看到的唯一区别是用于由表示[API中和阵列型括号记号(在序列仍可以把它解析到对象然后与另一个区别是。你的API和'\ U02c8v \ U0251 \ U02d0dk \ U0259'中的'vɒdkə'打印结果可能需要用适当的编码类型对结果进行编码 –

回答

1

我不相信它实际上正在改变价值观,我相信你只是看着不同的表现。(如果Swift的行为类似于Objective-C),print(x)将调用x上的“description”方法,该方法可以以任何喜欢的格式输出对象。

您可能想要做的是使用dataWithJSONObject:options:error(与您所做的基本相反的调用)重新编码数据,并查看表示的内容。

https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSJSONSerialization_Class/#//apple_ref/occ/clm/NSJSONSerialization/dataWithJSONObject:options:error

+0

我不能重新编码数据,因为它说顶部级别的对象不是一个数组或字典,但我打印它的日志和网页,这显然是一个字典任何想法? – YellowPillow

相关问题