使用存储的 JSON 而不是 Core Data

Posted

技术标签:

【中文标题】使用存储的 JSON 而不是 Core Data【英文标题】:use stored JSON instead of Core Data 【发布时间】:2015-09-29 12:03:12 【问题描述】:

有很多教程描述了如何从 Web 获取 JSON 对象并将它们映射到 Core Data。

我目前正在开发一个 ios(后来也包括 android)应用程序,该应用程序从 Web 加载 json 对象并将它们显示给用户。在我看来,在这种情况下,与 Core Data 之间的所有映射都是开销,直接保存 JSON 对象并将它们用作应用程序中的“缓存”会容易得多。是否有库/文档化的方法来实现获取 json 对象、将它们保存在本地并使用预定义的标识符获取它们?

我很想获取例如10 个对象,将它们展示给用户并在本地保存数据。下次用户在该列表上时,将显示本地数据,并在后台再次获取 json 文件以保持最新状态。我想这是一个常见的用例,但我没有找到任何教程/框架可以完全实现这一点。

【问题讨论】:

我知道这不完全是你的问题,但看看realm.io,它可能是一个不错的选择。真正易于使用和跨平台。而且速度很快。 【参考方案1】:

您可以简单地使用 NSURLCache 来缓存 http 响应而不是保存 JSON http://nshipster.com/nsurlcache/

【讨论】:

【参考方案2】:

有很多方法可以实现这一点。您可以根据数据的复杂性和数量使用文件存储或数据库来实现缓存。如果您正在使用文件,您只需要存储 JSON 响应并在创建活动/片段时加载它。我有时所做的是以字符串的形式将 JSON 响应存储在文件中,然后在活动/片段加载时检索它。下面是一个读写字符串文件的例子:

编写文件:

FileOutputStream outputStream = context.openFileOutput("myfilename",Context.MODE_PRIVATE);
        String stringToBeSaved = myJSONObject.toString();
        outputStream.write(stringToBeSaved.getBytes());

从文件中读取

 FileInputStream inputStream= context.openFileInput("myfilename");
        int c;
        String temp="";
        while( (c = inputStream.read()) != -1)
            temp = temp + Character.toString((char)c);

您可以使用以下方法将此字符串转换为 JSONObject:

JSONObject jsonObject = new JSONObject(temp);

或者你可以根据需要使用字符串。

【讨论】:

以上是关于使用存储的 JSON 而不是 Core Data的主要内容,如果未能解决你的问题,请参考以下文章

Core-Data:想要将新的 web xml 内容持久保存到我的数据存储中,而不是替换现有的

使用 Decodable 解码 JSON 嵌套字典并使用 Core Data 存储它

如何切换到将 Core Data 用于简单的 UITableView 而不是 NSArray?

将 JSON 数据插入 Core Data 存储需要很长时间

应用程序状态何时属于 Core Data 而不是 NSUserDefaults?

将 JSON 数据转换并存储为 iOS Core Data