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

Posted

技术标签:

【中文标题】如何使用 NSMutableDictionary 导出 .JSON 文件?【英文标题】:How to export .JSON file using NSMutableDictionary? 【发布时间】:2016-05-13 14:36:42 【问题描述】:

我有 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 并将其存储到本地存储中?

【问题讨论】:

你为什么没有尝试导出它? 你为什么挣扎,你有没有尝试使用NSJSONSerialization Dictionary 转换为json string,然后将string 保存为file 如果你打算将它存储在本地,为什么还要使用 JSON 呢?只需将字典直接写入文件即可。 NSDictionary 内置了直接读写文件的方法。不需要 JSON。 请不要在主站点上使用单词作为兄弟。这不是一些社交聊天网站。另一件事是您没有显示您所面临的确切问题,以便可以帮助您。只是写我正在苦苦挣扎的陈述表明你的努力很差 【参考方案1】:

您当然可以将字符串导出到 .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 归档。

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于如何使用 NSMutableDictionary 导出 .JSON 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NSMutableDictionary 连接 Tableview 和 View Controller?

如何使用键将对象添加到 NSMutableDictionary?

如何将 NSArray 添加为 NSMutableDictionary 的 NSMutableDictionary 键?

如何创建一个包含许多 NSMutableArrays 的 NSMutableDictionary

静态 NSMutableDictionary

当键看起来像一个 int 时如何访问 NSMutableDictionary?