添加/编辑JSON数据iOS?
我使用以下代码从本地驱动器中获取JSON数据。 它运作得很好
现在我想将我的JSON数据添加到相同的URL
我不想创建和替换以前的json文件
可能吗??
有没有简单的方法呢?
NSURL *fileUrl=[NSURL URLWithString:@"localDriveURL"]; //NSData *data = [NSData dataWithContentsOfFile:filePath]; NSData *data=[NSData dataWithContentsOfURL:fileUrl]; NSError* error; NSArray* json = [NSJSONSerialization JSONObjectWithData:data //1 options:NSJSONReadingMutableContainers error:&error]; NSArray *json2=[json valueForKey:@"locations"]; for (int i=0; i<json2.count; i++) { }
如果该文件是应用程序包的一部分,则无法更改任何内容。
一般来说,您确实想要替换现有文件。
虽然你可以使用NSFileHandle
将额外的数据写入文件,但它相对复杂并且相对可能会破坏JSON(当你犯一个索引错误或类似的东西时)。
您最好的选择是读取可变数据(如您所示),然后修改并使用NSJSONSerialization
再次转换回数据,然后将该数据保存到磁盘(替换原始数据)。
您当前的代码应该是:
NSMutableArray* json = [...
因为您使用的是可变容器选项。
然后,您可以向arrays添加一些新项:
[json addObject:@"Stuff"]; [json insertObject:@"Other Stuff" atIndex:0];
然后重新保存:
data = [NSJSONSerialization dataWithJSONObject:json options:nil error:&error]; [data writeToURL:fileUrl atomically:YES];
在我的代码中,我将JSON附加到一个打开的文件,其中包含以下内容(我实际上是一个宏)
我使用序列化和我输入的普通文本来进行格式化更好:
对于普通文本,我做了一个宏来追加:
#define jsonAppend(X) [outStream write:[[@X dataUsingEncoding:NSUTF8StringEncoding] bytes] maxLength:[@X lengthOfBytesUsingEncoding:NSUTF8StringEncoding]]
– >你必须打开一个输出流到你的文件并排队到最后我想,但在我的代码我只是打电话
jsonAppend("WhatEverIwAntToAppend");
并且只要附加到现有的JSON结构:
[NSJsonSerialization writeJSONObject:My-Dictionary-Object toStream:outStream options:1 error:&error]
只要你有一个文件句柄,它应该很容易。
关于如何在追加模式下打开流检查: https : //developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/nsoutputstream_class/reference/reference.html