为啥我的 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 中为零的主要内容,如果未能解决你的问题,请参考以下文章
self.navigationController 在 swift 中为零
自定义类 Unarchive 在 Cocoa Swift 中为零
navigationController 在 swift 中为零
为啥 nib 文件中的 UITableViewCell(加载并添加到堆栈)在 viewDidAppear 中为零,但在 viewDidLoad 中没问题?