2016-05-13 2 views
-3

У меня есть NSMutableDictionary внутри этого значения присутствуют как этотКак экспортировать файл .JSON с помощью 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 и хранить его в локальном хранилище?

+0

Почему бы вам не попробовать его экспортировать? – Shubhank

+0

Почему вы боретесь, вы пытались использовать 'NSJSONSerialization'? – luk2302

+0

@Shubhank я искал, но не могу получить точную –

ответ

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.

0

В чем проблема? Вы конвертируете словарь в NSData, используя NSJSONSerialization. Затем вы пишете NSData в файл, используя вариант writeToFile: или writeToURL: Нет причин для прохождения NSString, это просто пустая трата времени, памяти и времени автономной работы.

Чтобы прочитать данные, используйте dataWithContentsOfFile или dataWithContentsOfURL, а затем NSJSONSerialization. Если вы используете сопоставленный файл, NSData даже не использует память; это было бы полезно, если ваши данные имеют несколько мегабайт.

Смежные вопросы