我想将json数据保存到文件中而不进行存档。这样我就可以打开文件并检查是否一切正常

// valid json data
if NSJSONSerialization.isValidJSONObject(jsonData) {

    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
    let documentsDirectory = paths[0] as! String
    let path = documentsDirectory.stringByAppendingPathComponent("test.json")
    println(path) // if I open the file from finder, all the data is archived


    // try 1: the jsonData is archived
    if NSKeyedArchiver.archiveRootObject(jsonData, toFile: path) {
        println("saved: true");
    }

    let stringTest = "asd"
    stringTest.writeToFile(path, atomically: true, encoding: NSStringEncoding.allZeros, error: nil)
    // the string is also archived

}


我也尝试

var jsonNSData = NSKeyedArchiver.archivedDataWithRootObject(jsonData)
var string = NSString(data: jsonNSData, encoding: NSUTF8StringEncoding)
println(string) // returns nil

最佳答案

您可以通过将JSON转换为NSDictionary,然后将其写入用户文档目录来实现:

var someJsonAsDict: [String: AnyObject] = ["foo": "string", "bar": NSNumber(integer: 5)]

if let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) as? [String],
    let documentsDirectory = paths.first
{
    let filePath = documentsDirectory.stringByAppendingPathComponent("myPlistFile")
    let fileManager = NSFileManager.defaultManager()

    //IMPORTANT - someJsonAsDict cannot have primite types(they must be boxed in Appropriate NSNumber, NSValue, etc)
    (someJsonAsDict as NSDictionary).writeToFile(filePath, atomically: true)

    //print path of simulator so you can read it from terminal
    println("target path is \(filePath)")
}


如果您碰巧将Array作为JSON的最外部对象,则只需替换:

someJsonAsDict as NSDictionary


使用适当的数组方法:

someJsonAsDict as NSArray


所有这些都将使用JSON创建plist文件。如果您碰巧需要原始json样式(如txt),则可以使用plutil(随Xcode命令行工具安装):

plutil -convert json myPlistFile.plist -o MyTxtFile.json

关于json - 您能否保存json数据而不进行存档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31532074/

10-14 21:56
查看更多