为啥我的 json 编码对象在 Swift 中为零

Posted

技术标签:

【中文标题】为啥我的 json 编码对象在 Swift 中为零【英文标题】:Why is my json-encoded object nil in Swift为什么我的 json 编码对象在 Swift 中为零 【发布时间】:2015-02-18 06:05:56 【问题描述】:

My swift code is close to the one found on this site by Jameson Quave.

如果我 println(json) 串行,则值为 nil。但是,如果我 println(data),我会得到数字。如果我println("Body: \(strData)") 我得到以下信息。任何帮助将不胜感激。

这里是示例数据:

Body: Optional([

    "LocAddress": "2045 Broadway ",
    "City": "New York",
    "Region": "New York",
    "Country": "United States"
,

    "LocAddress": "6916 4th Ave",
    "City": "New York",
    "Region": "New York",
    "Country": "United States"
,

    "LocAddress": "Bleaker St.",
    "City": "New York",
    "Region": "New York",
    "Country": "United States"
,

    "LocAddress": "37-45 87th St",
    "City": "New York",
    "Region": "New York",
    "Country": "United States"
,

    "LocAddress": "88-35 249th St",
    "City": "New York",
    "Region": "New York",
    "Country": "United States"
,

    "LocAddress": "225 West 79th",
    "City": "New York",
    "Region": "New York",
    "Country": "United States"

])

如果有人问过这个问题,我深表歉意。我是 *** 的常客,在发布这个问题之前,我已尽力寻找答案。

【问题讨论】:

如果你看我发的链接,看看哪里有语句 println("Body: (strData)")。 'Body:' 部分来自那里, Optional() 来自 swift 编译器。我可以简单地添加一个!在行尾标记 var strData = NSString(data: data, encoding: NSUTF8StringEncoding)!它会照顾可选的。不管这两件事,我的 strData 是 JSON 格式,那么为什么当我做 var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as 时呢? NSDictionary 然后 println(json),是 nil 吗? 你拥有的是 JSON array 而不是 dictionary 【参考方案1】:

您的示例数据不是有效的 JSON。看起来它可能是 JSONP,不管怎样,如果你去掉开头的 Body: Optional( 和关闭的 ) 你就会有有效的 JSON。但是,如方括号所示,JSON 是一个数组,您可以选择将其转换为字典。

您可以先尝试将其转换为 NSArray,或者是字符串字典数组的 [[String:String]]。如果你走 NSArray 路线,你可以迭代数组并将成员转换为 NSDictionaries。

【讨论】:

我不认为我铸造的NSString strData是到NSDictionary中,我转换作为一串数字数据 来自您的评论var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as? NSDictionary 这是反序列化字符串并将其转换为字典。相反,你需要做var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as? NSArray 我认为这行得通,只是还有一件事:我如何遍历这个数组。很抱歉问了这么简单的问题,但我的大脑已经死了一半。我无法通过简单地执行 json[0] 来访问任何成员.......................... ...... NVM 我被删除了?它奏效了 对于 json 中的 dict 为! [NSDictionary] println(dict["city"])。抱歉,在移动设备上。 没问题,我刚刚接受了你的回答。先生,您是天赐之物!非常感谢你。在过去的两个小时里,我一直在为此感到压力

以上是关于为啥我的 json 编码对象在 Swift 中为零的主要内容,如果未能解决你的问题,请参考以下文章

选项的保护语句在 swift 中为零

self.navigationController 在 swift 中为零

自定义类 Unarchive 在 Cocoa Swift 中为零

RestKit:映射类在 Swift 中为零

navigationController 在 swift 中为零

为啥 nib 文件中的 UITableViewCell(加载并添加到堆栈)在 viewDidAppear 中为零,但在 viewDidLoad 中没问题?