Reading in a JSON File Using Swift Reading in a JSON File Using Swift swift swift

Reading in a JSON File Using Swift


Follow the below code :

if let path = NSBundle.mainBundle().pathForResource("test", ofType: "json"){    if let jsonData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)    {        if let jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary        {            if let persons : NSArray = jsonResult["person"] as? NSArray            {                // Do stuff            }        }     }}

The array "persons" will contain all data for key person. Iterate throughs to fetch it.

Swift 4.0:

if let path = Bundle.main.path(forResource: "test", ofType: "json") {    do {          let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)          let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves)          if let jsonResult = jsonResult as? Dictionary<String, AnyObject>, let person = jsonResult["person"] as? [Any] {                    // do stuff          }      } catch {           // handle error      }}


If anyone is looking for SwiftyJSON Answer:
Update:
For Swift 3/4:

if let path = Bundle.main.path(forResource: "assets/test", ofType: "json") {    do {        let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .alwaysMapped)        let jsonObj = try JSON(data: data)        print("jsonData:\(jsonObj)")    } catch let error {        print("parse error: \(error.localizedDescription)")    }} else {    print("Invalid filename/path.")}


Swift 4.x and 5.x using Decodable

struct ResponseData: Decodable {    var person: [Person]}struct Person : Decodable {    var name: String    var age: String    var employed: String}func loadJson(filename fileName: String) -> [Person]? {    if let url = Bundle.main.url(forResource: fileName, withExtension: "json") {        do {            let data = try Data(contentsOf: url)            let decoder = JSONDecoder()            let jsonData = try decoder.decode(ResponseData.self, from: data)            return jsonData.person        } catch {            print("error:\(error)")        }    }    return nil}

Swift 3

func loadJson(filename fileName: String) -> [String: AnyObject]? {    if let url = Bundle.main.url(forResource: fileName, withExtension: "json") {        do {            let data = try Data(contentsOf: url)            let object = try JSONSerialization.jsonObject(with: data, options: .allowFragments)            if let dictionary = object as? [String: AnyObject] {                return dictionary            }        } catch {            print("Error!! Unable to parse  \(fileName).json")        }    }    return nil}