添加/编辑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