如何使用 Alamofire/ObjectMapper 返回嵌入在字典中的 JSON 字符串?
Posted
技术标签:
【中文标题】如何使用 Alamofire/ObjectMapper 返回嵌入在字典中的 JSON 字符串?【英文标题】:How to return a JSON string embedded in a dictionary using Alamofire/ ObjectMapper? 【发布时间】:2016-12-12 00:54:02 【问题描述】:我在尝试访问 JSON 字典中的字符串时遇到问题,这是 JSON 数据,我尝试访问的字符串是“链接”值:
channels = (
social =
facebook =
"facebook_id" = 47360808996;
link = "https://www.facebook.com/CBS";
;
twitter =
link = "https://twitter.com/CBS";
"twitter_id" = 97739866;
;
;
);
这是我创建的自定义对象,它一直给我一个错误
“类型'(key: String, value: AnyObject)'没有下标成员”
class SocialInfo: NSObject, Mappable
var facebook: String?
var facebookDict: String?
required init?(map: Map)
func mapping(map: Map)
///transforms string to dictionary [string: anyobject] - only used for specific JSON data name: (facebook) - (link)
let facebookTransform = TransformOf<String, [String: AnyObject]> (fromJSON: (value: [String: AnyObject]?) -> String? in
if let value = value
for dict in value
if let social = dict["social"] as? NSDictionary
if let fb = social["facebook"] as? [String: AnyObject]
if let fbLink = fb["link"] as? String
return fbLink
return nil
, toJSON: (value: String?) -> [String: AnyObject]? in
return nil
)
facebookDict <- (map["channels"], facebookTransform)
facebook <- map["link"]
这是我获取信息的 JSON 调用函数:
func getSocialInfo (_ completion: (([SocialInfo]) -> Void)?)
Alamofire.request("\(baseURL)/\(apiKey)/show/950", method: .get, encoding: JSONEncoding.default).responseArray (response: DataResponse<[SocialInfo]>) in
if let channelsResponse = response.result.value
completion?(channelsResponse)
作为参考,我使用 NSURLSession 从一个工作项目中重新创建了这个,下面的代码可以工作:
if let channels = jsonResult["channels"] as? [[String:AnyObject]], !channels.isEmpty
let channel = channels[0] // now the compiler knows it's [String:AnyObject]
let social = channel["social"] as? NSDictionary
let facebookDict = social!["facebook"] as? [String:AnyObject]
let facebook = nullToNil(facebookDict!["link"]) as? String ?? "N/A"
let twitterDict = social!["twitter"] as? [String:AnyObject]
let twitter = nullToNil(twitterDict!["link"]) as? String ?? "N/A"
【问题讨论】:
这甚至不是一个有效的 JSON 数据集。 数据是这样的,我只提取了与问题相关的部分。 JSON 数据集不包含分号。 这个可以,我知道它可以工作,因为我使用 NSURLSession 编写了项目并且工作正常。我正在尝试将其转换为使用 AlamoFire。 【参考方案1】:我假设您使用 Swift 3,因为 Swift 2 已被弃用。
在 Swift 3 中解析 JSON 时应避免使用 NSDictionary
和 AnyObject
。只需在任何地方使用 [String: Any]
。
【讨论】:
以上是关于如何使用 Alamofire/ObjectMapper 返回嵌入在字典中的 JSON 字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?