Я действительно пытаюсь прочитать файл JSON в Swift, чтобы поиграть с ним. Большую часть двух дней я потратил на повторный поиск и пробовал разные методы, но пока не повезло, поэтому я подписался на StackOverFlow, чтобы узнать, сможет ли кто-нибудь указать мне правильное направление .....
Мой JSON-файл называется test.json и содержит следующее:
{
"person":[
{
"name": "Bob",
"age": "16",
"employed": "No"
},
{
"name": "Vinny",
"age": "56",
"employed": "Yes"
}
]
}
Файл хранится в документах напрямую, и я обращаюсь к нему, используя следующий код:
let file = "test.json"
let dirs : String[] = NSSearchPathForDirectoriesInDomains(
NSSearchpathDirectory.DocumentDirectory,
NSSearchPathDomainMask.AllDomainMask,
true) as String[]
if (dirs != nil) {
let directories: String[] = dirs
let dir = directories[0]
let path = dir.stringByAppendingPathComponent(file)
}
var jsonData = NSData(contentsOfFile:path, options: nil, error: nil)
println("jsonData \(jsonData)" // This prints what looks to be JSON encoded data.
var jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: nil) as? NSDictionary
println("jsonDict \(jsonDict)") - This prints nil.....
Если кто-то может просто дать мне толчок в правильном направлении, как я могу десериализовать файл JSON и поместить его в доступный объект Swift, я буду вечно благодарен!
С уважением,
Krivvenz.
path
он виден только вif
области видимости и не разрешен при его использовании вNSData(contentsOfFile, options, error)
; у вас также есть опечатки в именах enum.Ответы:
Следуйте приведенному ниже коду:
Массив "people" будет содержать все данные для ключевого лица. Итерируйте проходы, чтобы получить его.
Swift 4.0:
источник
Если кто-то ищет SwiftyJSON Ответ:
Обновление:
Для
Swift 3/4
:источник
url(forResource
в ,(NS)Bundle
чтобы избежать дополнительного шага , чтобы создать URLSwift 4 с использованием Decodable
Свифт 3
источник
Xcode 8 Swift 3 считывает json из обновления файла:
источник
Обновлены названия для Swift 3.0
На основании ответа Абхишека и Друвы
источник
Упрощение примера, представленного Питером Крейнцем. Работает со Swift 4.2.
Функция расширения:
Пример модели:
Пример использования:
Пример будет работать и с массивами:
Обратите внимание, что мы не предоставляем ненужных обобщений, поэтому нам не нужно приводить результат разбора.
источник
Ответ Swift 2.1 (на основе ответов Абхишека):
источник
Вывод:
источник
Это прекрасно сработало со мной
источник
Вот мое решение с использованием SwiftyJSON
источник
👆🏻 готово к копированию и вставке, независимое от сторонних разработчиков решение.
использование 👇🏻
let json:[[String : AnyObject]] = loadJSON(name: "Stations")!
источник
Я даю другой ответ, потому что ни один из них не предназначен для загрузки ресурса из тестового пакета. Если вы используете удаленный сервис, который использует JSON и хотите выполнить модульное тестирование, анализируя результаты, не затрагивая реальный сервис, вы берете один или несколько ответов и помещаете их в файлы в папке «Тесты» в своем проекте.
При этом также используется SwiftyJSON, но основная логика получения тестового пакета и загрузки файла - ответ на вопрос.
источник
Swift 4: опробуйте мое решение:
источник
fromJSON
функция расширения выбрасывает, но в примере вы вызываете ее безtry
ключевого слова. Этот код не будет компилироваться.fromJSON
вы используете расширение Decodable, но при этом вы не используете информацию типа Decodable, а предоставляете дополнительные (совершенно бесполезные) обобщения.Последний swift 3.0 абсолютно рабочий
источник
Swift 4
JSON
toClass
withDecodable
- для тех, кто предпочитает занятияОпределите классы следующим образом:
Использование, довольно абстрактно:
Это позволяет методы как для классов, так
People
и дляPerson
переменных, атрибутов и методов также могут быть помечены, какprivate
это необходимо.источник
Следующий код работает для меня. Я использую Swift 5
Затем, если ваш Person Struct (или Class) является Decodable (а также все его свойства), вы можете просто сделать:
Я избегал всего кода обработки ошибок, чтобы сделать код более разборчивым.
источник
Обновлено для Swift 3 с самым безопасным способом
источник
Swift 5.1, Xcode 11
Вы можете использовать это:
источник
Исходя из ответа Абхишека , для iOS 8 это будет:
источник
Это работало для меня с XCode 8.3.3
источник
Swift 4.1 обновил Xcode 9.2
источник
NSData
в Swift 3+, и.allowFragments
в этом случае это бессмысленно.источник
Я использовал приведенный ниже код для извлечения JSON из файла FAQ-data.json, присутствующего в каталоге проекта.
Я реализую в Xcode 7.3, используя Swift.
Структура файла JSON:
источник
Я также мог бы порекомендовать Ray Wenderlich Swift JSON Tutorial (который также охватывает удивительную альтернативу SwiftyJSON, Gloss ). Выдержка (которая предоставлена сама по себе, не полностью отвечает автору, но добавленная ценность этого ответа - ссылка, поэтому для этого не нужно использовать -1):
Конечно, в XCode 8.x вы просто дважды нажимаете пробел и говорите: «Эй, Сири, пожалуйста, десериализуйте этот JSON для меня в Swift 3.0 с пробелами / табуляциями».
источник
SWIFTYJSON ВЕРСИЯ SWIFT 3
источник
Сначала создайте кодируемый Struc следующим образом:
Теперь объявите переменную
Читать из основного каталога
Читать из Интернета
источник
Используйте эту универсальную функцию
с этой строкой кода:
для этого типа:
источник