2016-09-22 14 views
0

私のswiftアプリでは、webserviceからコメントを取得しています。着信JSONの一般的な形式は:(alamofireで)print(response.result.value)SwiftyJSONで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; 
    } 
); 

これは、実際の結果である

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)に決して到達しません。あなたは私のSWIFTコードを調整するために私を助けてくださいすることができます - 私は、着信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のようなものを見た場合、それが働くだろうと思いますか?

1件の追加情報 - 次のように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!) 
} 

答えて

1

は.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() 
             } 
            } 
    } 
+0

ありがとう、それは今働きます! – user3766930

0

あなたの応答は正しいjsonデータではないようです。

まず、jsonプロパティを:で区切ってください。=ではなく、あなたの例では、"_id" = 57e460c0d9f58eb150470a0b;"_id" : 57e460c0d9f58eb150470a0b;でなければなりません。

第2に、応答データは変数とセミコロンを含むため、jsonp形式のようです。しかし、json形式はまだ正しくありません。だから私はあなたのソリューションは、そのような奇妙な"json"データに合うようにアルゴリズムを調整するものではないと思う、あなたはなぜそのような奇妙なデータを提供するあなたのサーバーに尋ねなければならない。

関連する問題