我正在尝试从本地文件加载一些
JSON数据.
在this Apple doc它说:
Manage the data files for your app using the asset catalog. A file can
contain any sort of data except device executable code generated by
Xcode. You can use them for JSON files,scripts,or custom data types
所以我添加了一个新数据集并将JSON文件放入其中.现在我可以在Assets.xcassets文件夹下看到它(Colours.dataset文件夹里面有colours.json和Contents.json)
我找到了this SO答案,显示了如何读取JSON文件,我正在使用此代码来读取文件:
if let filePath = NSBundle.mainBundle().pathForResource("Assets/Colours",ofType: "json"),data = NSData(contentsOfFile: filePath) { print (filePath) do { let json = try NSJSONSerialization.JSONObjectWithData(data,options: NSJSONReadingOptions.AllowFragments) print(json) } catch { } } else { print("Invalid file path") }
但是此代码正在打印“无效的文件路径”而不是读取文件.我也试过“颜色”和“Colours.json”,但无济于事.
谢谢.
解决方法
您无法使用NSBundle.pathForResource访问随机文件的方式访问数据资产文件.由于它们只能在Assets.xcassets中定义,因此需要初始化NSDataAsset实例以访问其内容:
let asset = NSDataAsset(name: "Colors",bundle: NSBundle.mainBundle()) let json = try? NSJSONSerialization.JSONObjectWithData(asset!.data,options: NSJSONReadingOptions.AllowFragments) print(json)
请注意,NSDataAsset类是从iOS 9.0开始引入的. macOS 10.11.
Swift3版本:
let asset = NSDataAsset(name: "Colors",bundle: Bundle.main) let json = try? JSONSerialization.jsonObject(with: asset!.data,options: JSONSerialization.ReadingOptions.allowFragments) print(json)
此外,NSDataAsset令人惊讶地位于UIKit / AppKit中,所以不要忘记在代码中导入相关框架:
#if os(iOS) import UIKit #elseif os(OSX) import AppKit #endif