2017-03-28 129 views
0

我很好奇爲什麼我的json的格式不正確。我試圖添加一個數組字典,我弄明白了,我的json不是正確的格式,ACTIVE_CHATS和INACTIVE_CHATS應該是我在swift3上通過.append(value)創建的數組列表。但是在我嘗試使用JSON.parse之後,我的反應字符串化了,我得到了未被捕獲的json位置。我檢查與Android團隊,找出它應該[]而不是()陣列..我如何得到正確的格式爲JSON在迅速?JSON解析來自Swift轉換的json字符串失敗

這是我目前的JSON格式這是不對的

{ 
    "ACTIVE_CHATS" =  (
    ); 
    "INACTIVE_CHATS" =  (
       { 
      "app_token" = "someapptoken"; 
      "channel_name" = "Channel-1"; 
      icon = "https://media.icon.com/icons/appicon-1.jpg"; 
      "last_message" = "some message"; 
      "time_since_last_message" = "2017-03-28 06:13:33 +0000"; 
      "unread_messages" = 3; 
     } 
    ); 
    "ALL_CHAT" =  { 
     "app_token" = "someapptoken"; 
     "channel_name" = "Channel-2"; 
     icon = "https://media.icon.com/icons/appicon-2.jpg"; 
     "last_message" = "Some message"; 
     "time_since_last_message" = "2017-03-28 06:13:33 +0000"; 
     "unread_messages" = 3; 
    }; 
} 

我的代碼的時候創建快捷

 var activearray = Array<Any>() 
     var inactivearray = Array<Any>() 
     var testdict = [String: Any]() 
     var counter = 0 
     for data in array { 
      var listMessage : [Any?] = (Smooch.conversation()?.messages)! 
      let unreadMsgCount = Smooch.conversation()?.unreadCount 
      if listMessage.count == 0{ 
       continue 
      } 
      var iconUrl = "" 
      var channelName = "" 
      for msg in listMessage { 
       let msgSkt = msg as! SKTMessage 
       if (!msgSkt.isFromCurrentUser) { 
        iconUrl = (msg as! SKTMessage).avatarUrl! 
        channelName = (msg as! SKTMessage).name! 
        break 
       } 
      } 
      let lastMsg : SKTMessage = listMessage[listMessage.count - 1] as! SKTMessage 
      let lastMsgText : String = lastMsg.text! 
      let epTime : Date = lastMsg.date! 
      var dict = [String: Any]() 
      dict = ["unread_messages":unreadMsgCount! as UInt,"icon":iconUrl,"channel_name":channelName,"last_message":lastMsgText,"time_since_last_message":epTime,"app_token":array[counter]] 
      if counter == 0 {//put all 
       testdict["ALL_CHAT"] = dict 
      }else if counter > 0 && unreadMsgCount! > 0{// add active 
       activearray.append(dict) 
      }else{//add unactive 
       inactivearray.append(dict) 
      } 
      counter += 1 
     } 

     testdict["ACTIVE_CHATS"] = activearray 
     testdict["INACTIVE_CHATS"] = inactivearray 
+0

你從哪裏得到上面的輸出? – Fahim

+0

@Fahim我輸出我的json使用nsstring格式從obj-c ... 然後我解析使用JSON.parse從反應本機得到未捕獲的位置JSON,檢查與JSON解析器也相同的錯誤。 – Abadi

+0

對不起,我的意思是原始JSON的來源是什麼?這是來自API端點嗎?如果是的話,那麼你可能需要通過API端點正確格式化JSON ... – Fahim

回答

1

基於我們在評論中討論JSON,你所面臨的問題,是因爲您輸出一個NSDictionary作爲其字符串表示形式(或說明,如果您願意)而不是實際輸出有效的JSON :)

您需要做的是t o將要轉換爲JSON格式的最終​​NSDictionary傳遞給data(withJSONObject:options:)方法JSONSerialization

在斯威夫特,代碼會是這個樣子:

do { 
    let data = try JSONSerialization.data(withJSONObject:testdict, options: JSONSerialization.WritingOptions.prettyPrinted) 
    let str = String(data:data, encoding: String.Encoding.utf8) 
    print(str) 
} catch { 
    print("JSON error") 
} 
+0

我看見了。謝謝@Fahim! 我也在嘗試這種方法,但得到json無效和應用程序崩潰。但現在它的工作,(也許我有錯誤的代碼位置) – Abadi

+0

很高興聽到它的工作:) – Fahim