GSON - 更新 .json 文件
GSON - updating .json file
有什么方法可以更新 JSON 文件中的值,而无需将文件加载到对象、更改值并再次保存?
听起来效率很低
编辑:
例如。我想将一个项目添加到某个数组中
此问题的任何解决方案都需要以某种方式通读整个文件。任何现成的 JSON 库(例如 Gson)都会创建对象来表示文本 JSON 元素。
为了避免创建对象的 "overhead",您可以创建一个特殊用途的解析器,但您仍然需要读取整个文件。您可以通过连续读取一行、处理它然后将其写入输出文件来减少使用的内存量。在您描述的情况下,这主要是将行写回而不做任何更改。这将更有效率,但可能需要一段时间才能实施,并且在您将它们全部解决之前可能会有错误。最重要的是,如果 JSON 格式发生变化,您可能需要更改代码,然后完成解决可能引入的错误的过程。
如果您不想编写自己的解析器,但 JSON 文件很大并且您不想一次将其全部读入内存,您可以查看 Gson 流:https://sites.google.com/site/gson/streaming.
如今,人们经常使用现成的库,因为他们可以更快地完成实现并减少错误,即使执行时效率较低。除非效率低下对用户体验产生可衡量的影响或显着影响执行 time/memory 利用率,否则这种做法可能是可以接受的,但是 ymmv.
有什么方法可以更新 JSON 文件中的值,而无需将文件加载到对象、更改值并再次保存? 听起来效率很低
编辑: 例如。我想将一个项目添加到某个数组中
此问题的任何解决方案都需要以某种方式通读整个文件。任何现成的 JSON 库(例如 Gson)都会创建对象来表示文本 JSON 元素。
为了避免创建对象的 "overhead",您可以创建一个特殊用途的解析器,但您仍然需要读取整个文件。您可以通过连续读取一行、处理它然后将其写入输出文件来减少使用的内存量。在您描述的情况下,这主要是将行写回而不做任何更改。这将更有效率,但可能需要一段时间才能实施,并且在您将它们全部解决之前可能会有错误。最重要的是,如果 JSON 格式发生变化,您可能需要更改代码,然后完成解决可能引入的错误的过程。
如果您不想编写自己的解析器,但 JSON 文件很大并且您不想一次将其全部读入内存,您可以查看 Gson 流:https://sites.google.com/site/gson/streaming.
如今,人们经常使用现成的库,因为他们可以更快地完成实现并减少错误,即使执行时效率较低。除非效率低下对用户体验产生可衡量的影响或显着影响执行 time/memory 利用率,否则这种做法可能是可以接受的,但是 ymmv.