2014-02-13 27 views
1

我正在使用下面的代码从我的本地驱动器中获取JSON数据。 它工作的很好添加/编辑JSON数据iOS?

现在,我想我的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++) { 

} 
+1

你的意思是本地追加数据并上传到DropBox的?你检查了DropBox API文档吗? – Wain

+0

@Wain感谢回复我已编辑我的问题如何编辑或附加JSON数据到本地文件我不想替换它 – iCoder

回答

3

如果文件是程序包的一部分,你不能改变任何事情。

一般而言,您确实想要替换现有文件。

尽管您可以使用NSFileHandle将其他数据写入文件,但它相对复杂且相对可能会破坏JSON(当您创建索引错误或类似情况时)。

你最好的选择是读取可变数据(像你一样),然后修改并使用NSJSONSerialization再次转换回数据,然后将该数据保存到磁盘(替换原始数据)。

您当前的代码确实应该:因为可变容器选项你使用

NSMutableArray* json = [... 

你可以再加入一些新的项目,该数组:

[json addObject:@"Stuff"]; 
[json insertObject:@"Other Stuff" atIndex:0]; 

然后重新保存:

data = [NSJSONSerialization dataWithJSONObject:json options:nil error:&error]; 
[data writeToURL:fileUrl atomically:YES]; 
+0

对不起,我是一个新手。是否有任何教程或示例项目? – iCoder

0

在我的代码追加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

+0

虽然此解决方案可以很好地用于流出到文件,但它更适合于同时创建完整文件(由于JSON结构)。编辑现有的文件效果不佳(需要在开始追加前删除部分)。你使用这个进行编辑还是只使用新文件? – Wain