如何使用NSMutableDictionary导出.JSON文件?

时间:2016-05-13 14:36:42

标签: ios objective-c nsmutabledictionary nsjsonserialization

我有NSMutableDictionary,这个值就像这样

{
    0 =     {
        imageangle = "0.09630692";
        imageheight = "129.0245";
        imagepath = "assets-library://asset/asset.PNG?id=BD849AC4-EDF2-4E05-B5F8-F5EE34385A97&ext=PNG";
        imagescalex = "85.48777";
        imagescaley = "85.48777";
        imagewidth = "129.0245";
        mainheight = 282;
        mainwidth = 316;
    };
    memes =     {
        alpha = 1;
        alphaFont = 1;
        blue = 1;
        blueFont = 0;
        green = 1;
        greenFont = "0.5";
        memestext = "Kishore kumar kumar ";
        red = 0;
        redFont = 1;
        textheight = 34;
        textscalex = 13;
        textscaley = "30.5";
        textwidth = 316;
    };
}

使用此我喜欢在.json文件中导出此词典。

之后我转换为JSONSTRING:

     NSError *error;
     NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dickeyjson                  options:NSJSONWritingPrettyPrinted                                                                                    error:&error];
NSString* aStr;
aStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

我的问题:

是否可以将其导出为 .json 并将其存储到本地存储?

2 个答案:

答案 0 :(得分:0)

您当然可以将字符串导出到.json文件,这将是正确的错误处理方式的概述:

do {
    let jsonString = "{\"what\":\"ever\"}"
    let jsonFile = "file.json"
    guard let docs = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first else {
        throw NSError(domain: "what-no-Documents-folder??", code: 1, userInfo: nil)
    }
    let path = NSURL(fileURLWithPath: docs).URLByAppendingPathComponent(jsonFile)
    try text.writeToURL(path, atomically: false, encoding: NSUTF8StringEncoding)
} catch {
    fatalError("Writing failed!")
}

并将其读回来,

do {
    let path = NSURL(fileURLWithPath: "same as for writing")
    let jsonString = try NSString(contentsOfURL: path, encoding: NSUTF8StringEncoding)
}
catch {
    fatalError("Reading failed!")
}

但是,您可能希望在阅读时将此JSON放回字典中,是吗?在这种情况下,没有必要转换为JSON,您应该直接使用NSDictionary's writeToURL method,使用与上面相同的轮廓;因为我不相信任何JSON可表示的对象不符合NSCoder,因此可以使用writeToFile / writeToURL进行存档。

答案 1 :(得分:0)

究竟是什么问题?您使用NSJSONSerialization将字典转换为NSData。然后使用writeToFile:或writeToURL的变体将NSData写入文件:没有理由通过NSString,这只是浪费时间,内存和电池寿命。

要读取数据,请使用dataWithContentsOfFile或dataWithContentsOfURL,再使用NSJSONSerialization。如果使用映射文件,NSData甚至不使用内存;如果您的数据是多兆字节,那将非常有用。