#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
, содержащий массив записей [ ].