微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift3 – 在Swift 3中将JSON字符串转换为Dictionary

作为一个编码练习,我写了一个小程序,将Web上的 MySql数据带到iPhone上.在服务器端.我编写了PHP脚本来获取脚本以返回json数据.

在xcode上我有

[code]
.
.
.
     let jsonString = try? JSONSerialization.jsonObject(with: data!,options:    [])
    print(jsonString!)
    .
    .
    .
[/code]

在xcode控制台中,我有这个:

[code]
(
        {
        Address = "1 Infinite Loop Cupertino,CA";
        Latitude = "37.331741";
        Longitude = "-122";
        Name = Apple;
    }
)
[/code]

I have a function
    [code]

func convertToDictionary(text: String) -> [String: Any]? {
            if let data = text.data(using: .utf8) {
                do {
                    return try JSONSerialization.jsonObject(with: data,options: []) as? [String: Any]
                } catch {
                    print(error.localizedDescription)
                }
            }
            return nil
        }
[/code]

当我将jsonString传递给convertToDictionary(文本:)时

[code]
let dict = convertToDictionary(text: jsonString as! String)
[/code]

在控制台中,我收到错误“无法将类型’__NSSingleObjectArrayI'(0x10369bdb0)的值转换为’Nsstring'(0x1004eac60).”

但如果我硬编码json字符串然后将其传递给convertToDictionary(文本:)

[code] 
let hardCodedStr = "{\"Address\":\"1 Infinite Loop Cupertino,CA\",\"Latitude\":\"37.331741\",\"Longitude\":\"-122\",\"Name\":\"Apple\"}"

let dict = convertToDictionary(text: hardCodedStr)
print(dict!)
[/code]

它工作得很好.这是为什么?谢谢

解决方法

如果仔细观察jsonObject(with:options :)返回的内容,您将看到它是[String:Any]或[Any],具体取决于您的JSON.

因此,jsonString实际上存储了一个[String:Any],甚至认为编译器认为它是Any类型:

let jsonString = try? JSONSerialization.jsonObject(with: data!,options:    [])
print(jsonString!)

如果你试图将它传递给convertToDictionary,它接受一个String,它当然不会工作,因为字典和字符串不是兼容的类型.

如何解决这个问题呢?

问题已经解决了!你根本不需要convertToDictionary. jsonString本身就是你想要的字典.

这是你需要做的:

let jsonString = try? JSONSerialization.jsonObject(with: data!,options: []) as! [String: Any]
                                                                             ^^^^^^^^^^^^^^^^^
                                                                             Add this part

之后,您可以在jsonString上调用字典方法.我还建议你将jsonString重命名为其他东西.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐