如何使用SwiftyJSON解析特定格式的json?

时间:2016-09-22 23:14:36

标签: ios swift alamofire swifty-json

在我的swift应用中,我从网络服务中获取评论。传入json的一般格式是:

comments =     (
            {
        "_id" = 57e460a4d9f58eb150470a0a;
        content = "fsagsd";
        "sent_at" = "2016-09-22T22:52:20.061Z";
        "username" = kamil;
    },
            {
        "_id" = 57e460c0d9f58eb150470a0b;
        content = "hfdhfd";
        "sent_at" = "2016-09-22T22:52:48.682Z";
        "username" = kamil;
    }
);

这是print(response.result.value)

的实际结果

整个查询(alamofire)如下所示:

Alamofire.request(.GET, "\(serverURL)/get/\(case_id)/comments/"/*, headers: headers*/)
        .validate()
        .responseJSON { response in

switch response.result {
            case .Success:
                print("success")
                if let jsonData = response.result.value as? [[String: AnyObject]] {
                    for myJSON in jsonData {
                        if let myTest = SingleComment.fromJSON(JSON(myJSON)){
                            self.items.addObject(myJSON)
                            self.myTable.reloadData()
                        }
                    }
                }

但由于评论已嵌入我的json中的comments - 我从未到达self.items.addObject(myJSON)。我认为如果传入的json看起来像是这样的话会起作用:

    {
        "_id" = 57e460a4d9f58eb150470a0a;
        content = "fsagsd";
        "sent_at" = "2016-09-22T22:52:20.061Z";
        "username" = kamil;
    },
            {
        "_id" = 57e460c0d9f58eb150470a0b;
        content = "hfdhfd";
        "sent_at" = "2016-09-22T22:52:48.682Z";
        "username" = kamil;
    }

因为我无法更改传入的json - 你可以帮我调整我的快捷代码吗?

另外一个信息 - fromJSON功能如下:

class func fromJSON(json: JSON) -> SingleComment? {
    print("single comment from json")
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let username = json["username"].string
    let content = json["content"].string
    let sent_at = json["sent_at"].string
    let id = json["_id"].string
    let upd = dateFormatter.dateFromString(sent_at!)

    return SingleComment(username: username!, content: content!, sent_at: upd!, id: id!)
}

2 个答案:

答案 0 :(得分:1)

在.Success块中尝试此代码。希望它会对你有所帮助。

chrome.webRequest.onBeforeRequest.addListener(
    function(details)
    {
        console.log(details.requestBody);
    },
    {urls: ["*://google/*"]},
    ['requestBody']
);

答案 1 :(得分:0)

您的回答似乎不是正确的json数据。

首先,json属性应该由:分隔,而不是=。在您的示例中,"_id" = 57e460c0d9f58eb150470a0b;应为"_id" : 57e460c0d9f58eb150470a0b;

其次,响应数据似乎是jsonp格式,因为它包含变量和分号。但是json格式仍然不正确。所以我认为你的解决方案不是调整你的算法以适应这种奇怪的"json"数据,你必须问你的服务器,为什么它提供这样一个奇怪的数据。