Swift读取json文件

时间:2018-03-13 01:35:23

标签: json swift

我有这个错误。无法调用' jsonObject'使用类型'的参数列表(带:字符串,选项:[Any])' 我认为它必须是文件的不同类型,但不确定。 我不认为做bundle.main.url是正确的方法。我在另一个建议使用url的问题中看到过,但也不确定它是如何工作的。任何帮助将不胜感激,谢谢。

这是在InfoViewController中写入文件的代码

let fileName: String?
    let file: FileHandle? = FileHandle(forWritingAtPath: "fileName.json")


    if file != nil {
        // Set the data we want to write
        do{
            if let jsonData = try JSONSerialization.data(withJSONObject: fileName!, options: .init(rawValue: 0))
            {
                // Check if everything went well
                //print(NSString(data: jsonData, encoding: 1)!)
                let bookCover = (jsonData as AnyObject).value(forKeyPath: "bookCoverImage.image") as? [UIImage]
                let bookTitle = (jsonData as AnyObject).value(forKeyPath: "bookTitleLabel.text") as? [String]
                let author = (jsonData as AnyObject).value(forKeyPath: "authorLabel.text") as? [String]
                let year = (jsonData as AnyObject).value(forKeyPath: "bookYear.text") as? [String]
                let pages = (jsonData as AnyObject).value(forKeyPath: "numberOfPages") as? [String]
                let ratingStars = (jsonData as AnyObject).value(forKeyPath: "ratingStars.image") as? [UIImage]
                let reviews = (jsonData as AnyObject).value(forKeyPath: "totalReviews.text") as? [String]
                let description = (jsonData as AnyObject).value(forKeyPath: "descriptionLabel.text") as? [String]
                file?.write(jsonData)

                // Do something cool with the new JSON data
            }
        }
        catch {

        }
        // Write it to the file

        // Close the file
        file?.closeFile()
    }

这是发生错误的代码。在favoritesListController中。

var path: String?
var favoritesList: String?
var bookCoversDisplay = [UIImage]()
var titlesDisplay = [String]()
var authorsDisplay = [String]()
var yearDisplay = [String]()
var pagesDisplay = [String]()
var starRatingDisplay = [UIImage]()
var reviewsDisplay = [String]()
var descriptionsDisplay = [String]()


var bookCovers: UIImage!
var titles: String = ""
var authors: String = ""
var year: String = ""
var pages: String = ""
var starRating: UIImage!
var reviews: String = ""
var descriptions: String = ""

override func viewDidLoad() {
    super.viewDidLoad()
    path = Bundle.main.path(forResource: "favoritesList", ofType: "json")
    do {
        favoritesList = try String(contentsOfFile: path!)
        let jsonResult = try? JSONSerialization.jsonObject(with: favoritesList, options: [])

        if let array = jsonResult as? [Any] {
            if let bookCover = array.first {
                bookCoversDisplay = bookCover
            } else if let title = array.second {
                titlesDisplay = title
            } else if let author = array.third {
                authorsDisplay = author
            } else if let year = array.fourth {
                yearDisplay = year
            } else if let pages = array.fifth {
                pagesDisplay = pages
            } else if let starRating = array.sixth {
                starRatingDisplay = starRating
            } else if let reviews = array.seventh {
                reviewsDisplay = reviews
            } else if let description = array.eighth {
                descriptionsDisplay = description
            }
        }

1 个答案:

答案 0 :(得分:0)

也许可以帮到你:

    do{
  let data = try Data.init(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "Info", ofType: "json")!))
   let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
        print(json)
    }catch{
        print(error)
    }