当前位置: 首页 > 知识库问答 >
问题:

NSJ系列化。JSONObjectWithData更改返回结果的内容?

龙志勇
2023-03-14
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()
    }

所以现在就打印(parsedResult!) 给出:

{count=1;限制=10;偏移=0;结果 = ( { 数据集=(ldoce5,字典); head word=vodka; id=cqAG3cXCxZ;"part_of_speech"=名词;发音 = ( { 音频 = ( { lang="英式英语"; type=发音;url="/v2/字典/资产/ldoce/gb_pron/vodka0205.mp3"; } ); ipa="\U02c8v\U0252dk\U0259"; }, { 音频 = ( { lang="美式英语"; type=发音;url="/v2/字典/资产/ldoce/us_pron/vodka.mp3"; } ); ipa="\U02c8v\U0251\U02d0dk\U0259"; lang="美式英语"; } ); 感觉 = ( { 定义=("一个强烈的明确的酒精饮料原来来自俄罗斯,或者一杯这种" ); } ); url="/v2/字典/条目/cqAG3cXCxZ"; } ); status=200;总计=1; url="/v2/字典/ldoce5/条目?head word=vodka";}

但查询网址:这里

我把它贴在这里是为了方便:

{“状态”:200,“偏移量”:0,“限制”:10,“计数”:1,“总计”:1,“url”:“/v2/字典/ldoce5/条目?Headword=vodka","结果":[{"datasets":["ldoce5","字典"],"Headword":"vodka","id":"cqAG3cXCxZ","part_of_speech":"noun","发音":[{"audio":[{"lang":"英式英语","type":"发音","url":"/v2/字典/资产/ldoce/gb_pron/vodka0205.mp3"}],"ipa":"``v`dk``"},{"audio":[{"lang":"美式英语","type":"发音","url":"/v2/字典/资产/ldoce/us_pron/vodka.mp3"}],"ipa":"`v``dk`","lang":"美式英语"}],"感官":[{"定义":["一种原产于俄罗斯的强烈的清澈酒精饮料,或一杯

当打印出来的数据与Pearson API返回的数据明显不同时,NSJSONSerialization会改变我的数据,这有什么原因吗?

共有1个答案

邢星波
2023-03-14

我不相信它真的在改变值,我相信你只是在看一个不同的表示。(如果Swift的行为像Objective-C),print(x)将调用x上的“描述”方法,它可以以它喜欢的任何格式输出对象。

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

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

 类似资料:
  • 问题内容: 我正在尝试创建一种方法,从中可以查询数据库并检索整个表。 目前,如果我使用这些数据只是正常工作 中 的方法。但是,我希望该方法返回结果。 我正在了解当前代码。 我该如何实现? 问题答案: 您永远不要通过公共方法来回避。这很容易导致资源泄漏,因为您不得不保持语句和连接打开。关闭它们将隐式关闭结果集。但是,将它们保持打开状态将导致它们悬而未决,并且当它们打开过多时,将导致数据库用尽资源。

  • 我正在使用JOOQ和Postgres。在博士后中,我有一个专栏性别: (表本身是一个视图,性别列是用Java计算的值的占位符) 在Java中,当I.fetch()视图时,我会对每条记录进行一些计算: 所有看起来都很好,如果打印值,它们都是正确的。但是,当我在我的技能记录上调用intoResultSet()时,性别列在所有值旁边都有一个星号,例如“*男性”。 然后,我使用结果集作为OpenCSV C

  • 问题内容: 为什么更改总和顺序会返回不同的结果? = = 双方的Java和JavaScript的返回相同的结果。 我知道,由于以二进制表示浮点数的方式,某些有理数( 例如1/3-0.333333 … )无法精确表示。 为什么简单地更改元素的顺序会影响结果? 问题答案: 也许这个问题很愚蠢,但是为什么仅仅改变元素的顺序会影响结果呢? 它将根据值的大小更改四舍五入的点。作为示例 _样的_事情,我们所看

  • 我有一个简单的代码,可以从第14列开始将转置的范围复制到另一张表的最后一行 它按原样返回零结果。如果我将destrow从公式更改为simple 2(这是现在最后一个空行),则效果很好。为什么不返回目标工作表中的最后一行索引?

  • 我正在尝试处理新的AndroidLollipopMediaProjection API。 我发现(至少在我的股票三星Galaxy S4 jfltexx上),当我开始意图获取捕获屏幕的权限()时,除非我在前面的尝试中选中了“不要再次询问”,否则在中不会有结果... 和结果处理: 权限对话框显示得很好,但是我的活动被隐藏了,它永远不会转到。 知道出什么问题了吗?