如何使用 SwiftyJSON 解析 json 的特定格式?
how can I parse a specific format of json with SwiftyJSON?
在我的 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 - 你能帮我调整一下我的 swift 代码吗?
一个附加信息 - 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!)
}
在 .Success 块中尝试此代码。希望对你有帮助。
if let value = response.result.value {
let data = JSON(value)
if let responseDictionary = data.dictionary {
if let commentsArray = responseDictionary["comments"]?.array {
for commentObject in commentsArray {
if let myTest = SingleComment.fromJSON(commentObject){
self.items.addObject(myJSON)
}
}
self.myTable.reloadData()
}
}
}
您的回复似乎不是正确的 json 数据。
首先,json 属性应该用:
分隔,而不是=
。在您的示例中,"_id" = 57e460c0d9f58eb150470a0b;
应该是 "_id" : 57e460c0d9f58eb150470a0b;
。
其次,响应数据似乎是 jsonp 格式,因为它包含变量和分号。但是 json 格式仍然不正确。所以我认为你的解决方案不是调整你的算法来适应如此奇怪的 "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 - 你能帮我调整一下我的 swift 代码吗?
一个附加信息 - 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!)
}
在 .Success 块中尝试此代码。希望对你有帮助。
if let value = response.result.value {
let data = JSON(value)
if let responseDictionary = data.dictionary {
if let commentsArray = responseDictionary["comments"]?.array {
for commentObject in commentsArray {
if let myTest = SingleComment.fromJSON(commentObject){
self.items.addObject(myJSON)
}
}
self.myTable.reloadData()
}
}
}
您的回复似乎不是正确的 json 数据。
首先,json 属性应该用:
分隔,而不是=
。在您的示例中,"_id" = 57e460c0d9f58eb150470a0b;
应该是 "_id" : 57e460c0d9f58eb150470a0b;
。
其次,响应数据似乎是 jsonp 格式,因为它包含变量和分号。但是 json 格式仍然不正确。所以我认为你的解决方案不是调整你的算法来适应如此奇怪的 "json"
数据,你必须询问你的服务器,为什么它提供如此奇怪的数据。