2016-09-29 6 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"; 
      } 
); 
} 

내 코드는 다음과 같습니다

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 데이터 문제 데이터에 당신이 배열 cueca 개체가있는 반면, json 고개를 끄덕을 만드는 동안 단지 장애를 해결하려고하면 서버에서 또는 다른 곳에서 JSON 데이터를 얻는 경우 2 명의 에이전트 기록.

유효한 JSON 예 : 레코드의 [] 배열 함유

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

여기서 사전 cueca.

1

파일 경로가 nil이거나 URL이 nil이거나 데이터가 nil이므로 충돌이 발생합니다. nil check를 추가하십시오. 다음 코드를 사용해보십시오

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) 
        } 

       } 

      } 

     }