Сбой локального синтаксического анализа JSON в iOS swift 3.0

#ios #objective-c #xcode #swift3

#iOS #objective-c #xcode #swift3

Вопрос:

Я использую локальный JSON в своих проектах swift. Мне нужно извлечь данные в массив. Я получаю неожиданный сбой.

Мой 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)
  

Моя проблема:

фатальная ошибка: выражение «попробуйте!» неожиданно вызвало ошибку: ошибка Domain = NSCocoaErrorDomain Code = 3840 «Нет строкового ключа для значения в объекте вокруг символа 6». userInfo={NSDebugDescription= Нет строкового ключа для значения в объекте вокруг символа 6.}: файл /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-800.0.46.2/src/swift/stdlib/public/core/ErrorType.swift , строка 178

Мне нужно получить весь объект внутри «cuaca», чтобы я мог использовать массив для дальнейшего использования.

Комментарии:

1. это означает, что недопустимый json, проверьте один раз ваш файл JSON

Ответ №1:

Сбой происходит из-за того, что путь к файлу равен нулю, URL равен нулю или данные равны нулю. Пожалуйста, добавьте нулевую проверку. Попробуйте следующий код

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

                }

            }

        }
  

Ответ №2:

Наконец, это допустимая json проблема с данными, если вы получаете данные json с сервера или откуда-либо еще, просто попробуйте исправить ошибки при создании json nod, тогда как в ваших данных у вас есть cueca объект с массивом из 2 записей агента.

Допустимый JSON пример:

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

Здесь словарь cueca , содержащий массив записей [ ].