SBJSON将新数据附加到现有JSON文件中,而不先解析它

时间:2012-07-31 13:42:06

标签: objective-c ios json file-io sbjson

我正在创建一个应用程序,让用户可以在屏幕上绘制不同的颜色和画笔大小。我将绘制的每个绘制路径的信息存储在JSON文件中,以使其保持内存不足。现在我让它解析所有现有路径,然后添加新路径并将其全部重新写回来。我希望它只是简单地将新数据附加到JSON文件中而不必读入它并首先解析它,这将使得一次只有一条路径存在于内存中。

我正在使用SBJSON,JSONWriter有一些追加函数,但我认为你需要将JSON字符串首先附加到它,而不是文件,这意味着无论如何我都必须在文件中读取。有没有办法在不读取文件的情况下执行此操作?我确切知道数据是如何构建的。

2 个答案:

答案 0 :(得分:2)

这是可能的,但你必须作弊。您可以为每个路径创建一个独立的JSON文档,并将其附加到该文件。所以你的文件中会有这样的东西:

{"name":"path1", "from": [0,3], "to":[3, 9]}
{"name":"path2", "from": [0,3], "to":[3, 9]}
{"name":"path3", "from": [0,3], "to":[3, 9]}

请注意,这不是一个JSON文档,而是三个。但是,很简单,SBJsonStreamParser支持一次读取多个JSON文档。设置supportMultipleDocuments属性并将其插入SBJsonStreamParserAdapter,然后离开。这样做的好处是,如果文件中有许多路径,则可以在读完整个文件之前开始绘制。 (因为你得到了每条路径的回调。)

您可以在use case here.

上看到一些信息

答案 1 :(得分:0)

我很确定它不可能......我最终做的是将JSON文件作为字符串读取然后浪费内存将所有内容更改为字典和数组,我只是查找部分实例字符串(例如:我想在字符串“],”文本“”显示“之前插入一些内容,我想在其中插入数据并将其插入并将其写回文件。

据我所知,这是最好的解决方案。