将 JSON 响应转换为 Dictionary Swift

Posted

技术标签:

【中文标题】将 JSON 响应转换为 Dictionary Swift【英文标题】:Converting JSON reponse to an Dictonary Swift 【发布时间】:2015-09-14 20:14:41 【问题描述】:

我在将我的 JSON 响应转换为字典时遇到了一些严重的问题,这样我就可以同时在我的应用程序中使用一些静态数据,而不必一直等待请求。所以我的 JSON 格式如下所示

JSON 响应


    stories =     (
                
            "Article_Link" = "http://www.webdesignernews.com/ad_redirect?id=53";
            "Article_Shares" = "";
            "Article_Time" = "";
            "Article_Title" = "35 free images: Choose from Bigstock's library of 27 million\n[ad]";
            index = 1;
            source = "Web-Designer-Depot_recent";
            url = "http://www.webdesignernews.com/";
        ,
                
            "Article_Link" = "http://www.webdesignernews.com/redirect?url=http%3A%2F%2Ftympanus.net%2Fcodrops%2F2015%2F09%2F14%2Fcreating-material-design-ripple-effects-svg%2F";
            "Article_Shares" = 298;
            "Article_Time" = "32 min ago";
            "Article_Title" = "Creating Material Design Ripple Effects with SVG";
            index = 2;
            source = "Web-Designer-Depot_recent";
            url = "http://www.webdesignernews.com/";
        
    );

这是我尝试创建的字典,以便在操场文件中重新创建以下响应

Swift 字典

var data: [String:AnyObject] [

    "stories": [

        [
            "Article_Link": "http://www.webdesignernews.com/ad_redirect?id:51",
            "Article_Shares" : "",
            "Article_Time" : "",
            "Article_Title" : "Going Retro! 150 Vintage Vector Illustrations\n[ad]",
            "index" : 1,
            "source" : "Web-Designer-Depot",
            "url" : "http://www.webdesignernews.com/",
        ],
        [
            "Article_Link" : "http://www.webdesignernews.com/redirect?url:http%3A%2F%2Fprinzhorn.github.io%2Fskrollr%2F",
            "Article_Shares" : "2.3K",
            "Article_Time" : "23 min ago",
            "Article_Title" : "Skrollr - Scroll Animations for Everyone",
            "index" : 2,
            "source" : "Web-Designer-Depot",
            "url" : "http://www.webdesignernews.com/",
        ]
    ]  
]

但我不断收到以下一些错误

似乎无法弄清楚我在这里做错了什么......

【问题讨论】:

您忘记将 = 添加到您的数据中。 var data: [String:AnyObject] = 应该是这样的。 【参考方案1】:

您的 JSON 响应包含数组。你的数据字典应该是这样的:

var data: [String:AnyObject] = [

    "stories": [

        [
            "Article_Link": "http://www.webdesignernews.com/ad_redirect?id:51",
            "Article_Shares" : "",
            "Article_Time" : "",
            "Article_Title" : "Going Retro! 150 Vintage Vector Illustrations\n[ad]",
            "index" : 1,
            "source" : "Web-Designer-Depot",
            "url" : "http://www.webdesignernews.com/",
        ],
        [
            "Article_Link" : "http://www.webdesignernews.com/redirect?url:http%3A%2F%2Fprinzhorn.github.io%2Fskrollr%2F",
            "Article_Shares" : "2.3K",
            "Article_Time" : "23 min ago",
            "Article_Title" : "Skrollr - Scroll Animations for Everyone",
            "index" : 2,
            "source" : "Web-Designer-Depot",
            "url" : "http://www.webdesignernews.com/",
        ]
    ]  
]

然后您可以解析您的字典,例如:

for story in data["stories"] as! NSArray 
            println(story.valueForKey("Article_Link"))
        

【讨论】:

嘿,伙计,我已经使用 swiftyJSON 对其进行了解析,我只想创建一个静态版本的数据,我已经添加了您的建议并插入了以下 var data: AnyObject? = [String:AnyObject]() [......],但我仍然得到一个错误 我在回答中编辑的字典没有给我任何错误。 嘿伙计,我可以访问data["stories"][0]["Article_Title"] 之类的数据而不是使用循环吗? 我认为在 SwiftyJson 中你可以做到这一点。但以我的方式,你不能访问这样的数据。我建议你为你的数据创建一个模型并在你的模型中解析它。

以上是关于将 JSON 响应转换为 Dictionary Swift的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“System.Collections.Generic.Dictionary`2[System.String,S

将 JSON 数据转换为字典

如何使用 JayRock 将 Json 字符串转换为带有 Dictionary 的对象

如何将 JSON 转换为 Swift Dictionary 以进行 HTTP POST

如何将 Optional<Dictionary<String, Any>> 转换为 Dictionary<String, Any> 以发送带有 json 参数的 A

如何将 swift Dictionary 转换为 NSDictionary