2016-09-29 16 views
0

私は迅速なプロジェクトでローカルJSONを使用しています。私は配列でデータを抽出する必要があります。私は予想外のクラッシュを受けている。iOS swift 3.0ローカルJSON解析クラッシュ

私のJSONは次のとおりです。

{ 
cueca =  (
      { 
      agentName = "Sant"; 
      applicationName = "Get CDR Avaya"; 
      body = "Detail of the message."; 
      imageType = 1; 
      messageType = 1; 
      requestTime = "2016-01-01 00:00:04"; 
      sendTime = "2016-01-01 00:00:04"; 
      subject = "Mensagem 05"; 
      }, 
      { 
      agentName = "Sant2"; 
      applicationName = "Script Programming2"; 
      body = "Detail of the message."; 
      imageType = 1; 
      messageType = 1; 
      requestTime = "2016-01-01 00:00:03"; 
      sendTime = "2016-01-01 00:00:03"; 
      subject = "Mensagem 04"; 
      } 
); 
} 

MYコードは次のとおりです。

let file = Bundle.main.path(forResource: "ABC", ofType: "json")! as NSString 
    let url = URL(fileURLWithPath: file as String) 
    let data = try! Data(contentsOf: url) 
    let json = try! JSONSerialization.jsonObject(with: data) 

私の問題は次のとおりです。

fatal error: 'try!' expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=3840 "No string key for value in object around character 6." UserInfo={NSDebugDescription=No string key for value in object around character 6.}: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-800.0.46.2/src/swift/stdlib/public/core/ErrorType.swift, line 178

私は "cuaca" 内のすべてのオブジェクトを取得する必要があると私はさらなる使用のためにアレイを使用することができる。

+0

これは有効なJSONではないことを意味します。JSONファイルを一度確認してください –

答えて

0

最後にその有効jsonデータの問題は、サーバーまたは他の場所からJSONデータを取得している場合だけjsonうなずくの作成中に障害を是正しようとしてみてください2人のエージェントレコードの

有効JSON例:レコードの[]配列を含む

{ 
    "cueca": [{ 
     "agentName": "Sant", 
     // data so on 
    }, { 
     "agentName": "Sant2", 
     // data so on 
    }] 
} 

ここ辞書cueca

1

クラッシュは、ファイルパスがnilであるか、urlがnilであるか、データがnilであるためです。 nil checkを追加してください。自分のデータであなたは、配列を持つcuecaオブジェクトを持っているのに対し、次のコード

if let file:String = Bundle.main.path(forResource: "ABC", ofType: "json") 
     { 
      if let url:URL = URL(fileURLWithPath: file) 
      { 
       if let data:NSData = NSData(contentsOf: url as URL) 
       { 
        do{ 
         _ = try JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions()) 
        }catch{ 
         print(error) 
        } 

       } 

      } 

     }