2017-01-27 10 views
0

JSONSerializationは、私は、サーバーからJSON文字列を受け付けておりますし、それはこのようなエラーを返しますが、PHPのparcer

[[{\"type\":\"action\",\"action\":\"courier_on_map\",\"text\":\"\\u0421\\u043c\\u043e\\u0442\\u0440\\u0435\\u0442\\u044c \\u043d\\u0430 \\u043a\\u0430\\u0440\\u0442\\u0435\"}]] 

ウェブパーサは「JSON文字列は有効ですが、JSONデータは正確ではありません」と言います。 JSONSerializationは、しかし、言う:文字1

とエラーを返すの周りのオブジェクト内の値の

ない文字列キー。

コード:

func convertToNSDictionary() -> NSDictionary? 
    { 
     var string = self 
     string = string.replacingOccurrences(of: "[", with: "") 
     string = string.replacingOccurrences(of: "]", with: "") 

     if let data = string.data(using: .utf8) { 
      do { 
       return try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary 
      } catch { 
       print(error.localizedDescription) 
      } 
     } 

     return nil 
    } 
+0

プロジェクトでこの最高のライブラリを使うことができます。これは単純にあなたのコードになり、おそらく問題を解決するでしょう:https://github.com/SwiftyJSON/SwiftyJSON – ewan

+1

あなたのコードは私にとって完璧に動作しています。あなたの文字列はオプションではないことを確認してください。 –

答えて

0

手動で元のJSON文字列を操作しないでください。

あなたのコードを仮定すると、これは、Stringに延長内側にある:

let str = "[[{\"type\":\"action\",\"action\":\"courier_on_map\",\"text\":\"\\u0421\\u043c\\u043e\\u0442\\u0440\\u0435\\u0442\\u044c \\u043d\\u0430 \\u043a\\u0430\\u0440\\u0442\\u0435\"}]]" 

extension String { 
    func convertToDictionary() -> [String:Any]? { 
     let str = self 

     guard let data = str.data(using: .utf8), 
       let json = try? JSONSerialization.jsonObject(with: data, options: []) as! [[[String:Any]]] 
     else { 
      return nil 
     } 

     //debug prints 
     print(json) 
     let innerArray = json.first! 
     print(innerArray) 
     let dict = innerArray.first! 
     print(dict) 
     if let type = dict["type"] { 
      print(type) 
     } 
     // 

     return dict 
    } 
} 

let dict = str.convertToDictionary() 

print(dict) 

プリント:

[[["type": action, "action": courier_on_map, "text": Смотреть на карте]]] 
[["type": action, "action": courier_on_map, "text": Смотреть на карте]] 
["type": action, "action": courier_on_map, "text": Смотреть на карте] 
action 
Optional(["type": action, "action": courier_on_map, "text": Смотреть на карте]) 

あなたが本当にNSObjectが必要な場合は、それを唱えることができます。

let nsDict = dict! as NSDictionary 
関連する問題